javascript - 如何使用 Node js在sql db上插入记录?

标签 javascript sql node.js

我的 node.js 服务器上有一个 post 路由,我想在 body 请求上发送一个 json 对象以将其插入到 sql 数据库中。

如果我使用 "INSERT INTO users(UserInfo, BitMask) Values ("value1", 1)" 它可以工作,但如果我尝试像下面的示例那样对对象进行转义,它就不会。

我还尝试了 "INSERT INTO users(UserInfo, BitMask) Values ?", [client], 但它不起作用。

  router.post("/add/client", (request, res) => {
     let client = {}
     client.UserInfo = request.body.name;
     client.BitMask = request.body.bitmask;

     pool.request().query("INSERT INTO users(UserInfo, BitMask) Values ?" + mysql.escape(client),
    (err, result)=>{
     if(!err){
         return res.json({ success: true, data: result, records_added: result.affected_rows });
        }
        return res.json({ success: false, data: err });
    })
});

此代码返回以下对象:

  {
    "success": false,
    "data": {
        "code": "EREQUEST",
        "number": 0,
        "originalError": {
            "sqlstate": "07002",
            "code": 0
        },
        "name": "RequestError"
        }
    }

有人知道我在这里缺少什么吗? 我在谷歌上找到的答案之一是问题来自于在查询中多次使用占位符,但似乎并非如此。

感谢您的帮助。

最佳答案

使用参数化查询,我也会选择 async/await 语法以获得更好的可读性

router.post("/add/client", async (request, res) => {
  try {
    const result = await pool.request()
      .input('userInfo', request.body.name)
      .input('bitmask', request.body.bitmask)
      .query("INSERT INTO users(UserInfo, BitMask) Values (@userInfo, @bitmask)");
    return res.json({ 
      success: true, 
      data: result, // I would avoid this, potential to leak DB info to the client
      records_added: result.affected_rows 
    });
  } catch (e) {
    // consider returning next(e) here and handling errors somewhere common
    return res.json({ 
      success: false, 
      data: err // don't do this, again potential to leak DB info to the client
    });
  }
});

关于javascript - 如何使用 Node js在sql db上插入记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54441738/

相关文章:

javascript - 如何在页面加载时从 localStorage 加载 jPlayer 播放列表?

javascript - 在 Javascript 中插入字符串 - 法语键盘

javascript - rails : accessing an instance variable in a js. erb 文件

javascript - 添加特定数量的输入字段

javascript - Firebase 实时数据库分页

node.js - 在 Express 应用程序中从 JS 文件附加 JSON 文件

SQL:每队下一场比赛的休息时间最少

mysql - 如果当前时间在行的开始时间和结束时间之间,则检索行

sql - 索引是否改进了所有类型的查询?

macos - 在 Mac 上停止 node.js 进程