问题:我想将表单输入数据保存到mysql数据库,但socket.io需要防止默认,所以我无法找出使用socket.io并保存数据的最佳方法。
我有~10个输入字段的表单,我一直作为帖子请求提交,然后使用我的快递应用程序保存到mysql数据库。
在:
OnItemCommand
一切都运行良好,直到我被要求使用socket.io,以便我可以使用表单提交的信息实时更新另一个页面。为了使用socket.io,我必须阻止默认表单提交:
**index.ejs**
<form class='form' role='form' action='/users' method='POST'>
<input class='form-input' name='Client[FName]' type='text' />
<input class='form-input' name='Client[LName]' type='text' />
etc..
</form>
**server.js**
router.post('/users', (req, res) => {
const post = req.body.Client
pool.query('INSERT INTO Client SET ?', post, (err, result) => {
res.redirect(`users/${result.insertId}`);
})
})
socket.io工作得很好,我正在实时更新DOM,但现在我需要弄清楚如何再次将数据保存到mysql。除了在事件监听器中设置超时之外,还有什么方法可以做到这一点吗?我应该将我之前的查询插入socket.io函数吗?
我为这个啰嗦的问题道歉,并提前感谢。
答案 0 :(得分:0)
我能想到的两个选择
1)当您从客户端
收到消息时,将POST发送到server.js中的/ users2)对index.js提交处理程序中的/ users进行ajax POST,例如
form.addEventListener('submit', (e) => {
e.preventDefault();
socket.emit('message', {
FName: inputs[0].value,
LName: inputs[1].value,
...
});
$.post({
url: "/users",
...
});
})