繁体   English   中英

如何使用节点js在sql db上插入记录?

[英]How to Insert records on sql db using 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"
        }
    }

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

谢谢您的帮助。

使用参数化查询,我也会选择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
    });
  }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM