无法在 INSERT 语句中使用正文值

Unable to use body values in INSERT statement

我有一个 post 路由,希望以 JSON 格式发送正文值名称。

我的 server.js 包括:

app.use(express.json({ extended: false })); 

这是路线的样子:

router.post('/',
[
    check('name', 'Name is required!')
        .not()
        .isEmpty(),
],
async (req, res) => {
    const validationErrors = validationResult(req);
    if (!validationErrors.isEmpty()) {
        return res.status(400).json({ validationErrors: validationErrors.array() });
    }
    else {
        try {
            await odbc.connect(cn, (error, connection) => {
                console.log(req.body.name)
                connection.query(
                    "INSERT INTO test.amessages(name) VALUES(:req.body.name)",
                    (error, result) => {
                        if (error) {
                            throw error;
                        }
                        return res.status(200).json({ result });
                    }
                );
            });

        }
        catch (error) {
            console.error(error);
            return res.status(500).json({ msg: 'Server Error' });
        }
    }
});

变量前的 console.log 为我提供了提供给路由的正确值。通常,在使用其他针对 sqlserver 的工具时,我已经能够输入 ${req.body.name} 并且这会起作用。在这种情况下,以下内容不起作用 - (req.body.name)、:req.body.name、(req.body.name) 和其他各种组合。

下面是我如何向路线提供值的情况:

{
    "name": "Test"
}

如何在 Insert 语句中使用 body 值?

根据 documentation,您可以将参数数组传递给 query 函数,该函数将绑定到 ? 值:

connection.query("INSERT INTO test.amessages(name) VALUES(?)",
                    // actually with the json you provided it seems you rather want to use req.body.name
                    [req.body.test],
                    (error, result) => {
                        if (error) {
                            throw error;
                        }
                        return res.status(200).json({ result });
                    }
                );