[英]NodeJS Express REST API insert into MYSQL error
嗨,我正在嘗試從 REST API 的帖子(使用郵遞員進行測試)將記錄插入到 MySQL 數據庫中。 我一直收到服務器錯誤。 這是我的代碼(使用 async 和 await 並期待一個承諾作為回報)。 這是路由器:
* Creates a new user.
*/
router.post('/', async (req, res, next) => {
const options = {
body: req.body
};
try {
const result = await user.createUser(options);
res.status(result.status || 200).send(result.data);
} catch (err) {
next(err);
}
});
這是服務(更新 - 仍然錯誤):
sql = "INSERT INTO users (AccountHolderUserID, isSubUser, parentUsersID, appBrand, accessLevel, accessToken, tempPassword, email, firstName, lastName) VALUES ?";
values = [
[options.body.AccountHolderUserID, options.body.isSubUser, options.body.parentUsersID, options.body.appBrand, options.body.accessLevel, options.body.accessToken, options.body.tempPassword, options.body.email, options.body.firstName, options.body.lastName]
];
console.log(values);
pool.query(sql, [values], function (error, result, fields) {
if (error) {
reject(new ServerError({
status: 500, // Or another error code.
error: 'Server Error' // Or another error message.;
}));
return
}
resolve({
status: 200,
data: result
});
})
});
}
我在 pool.query 之前添加了一個控制台日志,這是我嘗試發布時的響應。 數據正在從表單到查詢,但得到一個無法將對象轉換為原始值的錯誤???
App listening on port 8082!
[
[
'1234, ',
'true,',
'1,',
'1,',
'1,',
'1312,',
'1234,',
'notifications@answeringmobile.com,',
'Nancy,',
'Flannagan'
]
]
TypeError: Cannot convert object to primitive value
如果有人知道我做錯了什么,請告訴我。 謝謝!
我認為 MySQL 期望每個單獨的值都有自己的問號。 您正在傳遞一組值,期望它會替換整個VALUES
子句,但 AFAIK 它從未以這種方式工作過。 錯誤消息說它需要一個原始值而不是一個對象(不是一個數組,它可能想說)。
嘗試這個:
sql = "INSERT INTO users " +
"(AccountHolderUserID, isSubUser, parentUsersID, appBrand, " +
" accessLevel, accessToken, tempPassword, email, " +
" firstName, lastName) " +
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
values = [
options.body.AccountHolderUserID, options.body.isSubUser,
options.body.parentUsersID, options.body.appBrand,
options.body.accessLevel, options.body.accessToken,
options.body.tempPassword, options.body.email,
options.body.firstName, options.body.lastName
];
pool.query(sql, values, ......); // note: just values, no extra square brackets
解決如下:
/**
* @param {Object} options
* @param {Object} options.body Created user object
* @throws {Error}
* @return {Promise}
*/
module.exports.createUser = async (options) => {
return new Promise((resolve, reject) => {
const User = {
"AccountHolderUserID": options.body.ctiAccountHolderUserID,
"isSubUser": options.body.isSubUser,
"parentUsersID": options.body.parentUsersID,
"appBrand": options.body.appBrand,
"accessLevel": options.body.accessLevel,
"accessToken": options.body.accessToken,
"tempPassword": options.body.tempPassword,
"email": options.body.email,
"firstName": options.body.firstName,
"lastName": options.body.lastName
}
console.log(User);
pool.query('INSERT INTO users set ?', User, function (error, result, fields) {
if (error) {
reject(new ServerError({
status: 500, // Or another error code.
error: 'Server Error' // Or another error message.;
}));
return
}
resolve({
status: 200,
data: result
});
})
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.