1

我有一个 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 语句中使用正文值?

4

1 回答 1

1

根据文档,您可以将参数数组传递给query将绑定到?值的 -function:

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 });
                    }
                );
于 2020-04-27T20:36:11.150 回答