首页 > 解决方案 > 为什么我收到此错误 val.toString is not a function?

问题描述

下面是我更新数据库字段的代码。即使没有提供所有字段,我也想更新字段。它也有一个图像。即使用户没有提供图像,我也想更新它。请帮我解决这个错误。

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)
   

标签: sqlnode.jsexpress

解决方案


可能您打算将“品牌”或“数据”传递给 db.query() 而不是 res。所以试试“[brand, id]”或“[data, id]”。

我认为您在第二个数组中传递的参数应该有一个 toString() 方法。这是因为需要将它们嵌入到 sql 字符串中。我使用错误的堆栈跟踪提出了这个想法。sqlstring 库试图转义参数(例如防止 sql 注入),如果参数不是字符串,它必须在参数上调用 toString()。


推荐阅读