如何在需要阻止由于socket.io提交表单时将表单数据保存到数据库?

时间:2016-07-01 01:32:47

标签: javascript mysql express socket.io

问题:我想将表单输入数据保存到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函数吗?

我为这个啰嗦的问题道歉,并提前感谢。

1 个答案:

答案 0 :(得分:0)

我能想到的两个选择

1)当您从客户端

收到消息时,将POST发送到server.js中的/ users

2)对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",
    ...

   });
})