以下是我更新数据库字段的代码。即使没有提供所有字段,我也想更新字段。它也有一张图片。即使用户没有提供图片,我也想更新它。请帮我解决这个错误。
const updateBrand = async (req,res,next) => {
var id = req.params.id;
console.log(id)
var db = req.con;
const brand = {
"brandName" : req.body.brandName,
"sortOrder" : req.body.sortOrder,
"status" : req.body.status
}
// const updatedbrand = req.body;
if(req.files !== undefined){
const data = {
"brandName": req.body.brandName,
"sortOrder": req.body.sortOrder,
"status": req.body.status,
"brandImage": req.file.filename,
}
let result = await db.query("Update Brands set ? where BrandId=?",[data, id], function(err,rows){
if(err){
res.json({
success:0,
message:"An error occurred"
})
}
else{
res.json({
success:1,
message:"Updated"
})
}
})
}
if(req.files == undefined){
console.log("inside res")
console.log(brand)
let result = db.query("Update brands set ? where brandId=?",[res,id],function(err,rows){
if(err){
res.json({
success:0,
message:"An error occurred"
})
}
else{
res.json({
success:1,
message:"Updated"
})
}
})
}
}
我收到了这个回复 -
Server start on port : 8080
Connection established
15741804
inside res
{ brandName: 'sketcher', sortOrder: '5', status: 'Active' }
(node:10952) UnhandledPromiseRejectionWarning: TypeError: val.toString is not a function
at Object.escape (E:\coding backup\Brands\node_modules\sqlstring\lib\SqlString.js:52:33)
at Object.objectToValues (E:\coding backup\Brands\node_modules\sqlstring\lib\SqlString.js:180:89)
at Object.escape (E:\coding backup\Brands\node_modules\sqlstring\lib\SqlString.js:54:26)
at Object.format (E:\coding backup\Brands\node_modules\sqlstring\lib\SqlString.js:100:19)
at Connection.format (E:\coding backup\Brands\node_modules\mysql\lib\Connection.js:271:20)
at Connection.query (E:\coding backup\Brands\node_modules\mysql\lib\Connection.js:189:22)
at updateBrand (E:\coding backup\Brands\src\Controller\controller.js:204:25)
at Layer.handle [as handle_request] (E:\coding backup\Brands\node_modules\express\lib\router\layer.js:95:5)
答案 0 :(得分:0)
可能您打算将“品牌”或“数据”传递给 db.query() 而不是 res。所以试试“[brand, id]”或“[data, id]”。
我认为你在第二个数组中传递的参数应该有一个 toString() 方法。这是因为它们需要嵌入到 sql 字符串中。我使用错误的堆栈跟踪提出了这个想法。 sqlstring 库正在尝试对参数进行转义(例如防止 sql 注入),如果参数不是字符串,它必须在参数上调用 toString()。
答案 1 :(得分:0)
您正在等待非异步方法,因为您使用的是回调。只需从代码中删除 await 关键字:
let result = db.query("Update Brands set ? where BrandId=?",[data, id], function(err,rows){...});
如果您想使用 await 关键字,请按如下方式更新您的代码:
try {
let result = await db.query("Update Brands set ? where BrandId=?",[data, id]);
} catch (exception) {
console.log("An error happened!" + exception);
}
正如@srknzl 提到的,确保您的额外参数 [data, id]
可以转换为字符串。