簡體   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