我對 NodeJS 有點陌生,正在為個人專案開發 API。我需要在資料庫中創建帳戶,然后向人們發送確認電子郵件。因此,創建帳戶的方法首先是將資料插入資料庫中,然后獲取 insertId 以創建令牌,然后發送包含令牌的確認電子郵件。
我正在使用 mysql 包(版本 2.18.1)中的 db.query() 與資料庫互動,這是來自 GCloud 的 MySQL 資料庫:
db.query("INSERT INTO user SET ?", [data], async (iErr, result) => {
if (iErr) {
res.status(410).jsonp({msg:iErr});
next(iErr);
} else {
const insertedId = result.insertId;
let emailToken = await getEmailToken(insertedId);
// then sending the email using another async method
}
但是,發送的令牌內部沒有 id,就像 getEmailToken() 使用“未定義”作為引數一樣。
現在有人有解決方案嗎?
謝謝你。
編輯:同樣的問題出現在電子郵件中,我在其中放置了 req.body.name。它在電子郵件中作為 ? undefined ? 發送,但在呼叫路由時給出(我將它存盤在資料庫中)。
uj5u.com熱心網友回復:
如果你使用mysql包,根據doc,db.query的回呼得到3個引數第一個錯誤第二個結果第三個欄位。像這樣:
db.query("INSERT INTO user SET ?", [data], async (err, result, fields) => {}
uj5u.com熱心網友回復:
該mysql包README檔案的獲取新插入的ID的方式:https://github.com/mysqljs/mysql#getting-the-id-of-an-inserted-row
您的代碼中的回呼有幾個問題:
- 看起來引數的順序可能是錯誤的——檔案是這樣的——注意結果物件是第二個引數,而不是第三個引數。因此,您可能會在“行”下獲得“結果”。
connection.query('INSERT INTO posts SET ?', {title: 'test'}, function (error, results, fields)
- 該
mysql庫使用insertId。這很容易被誤認為insertedId是 MongoDB 中使用的,但它們不是同一個詞。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/359363.html
