Невозможно использовать значения тела в инструкции INSERT - PullRequest
1 голос
/ 27 апреля 2020

У меня есть почтовый маршрут, который ожидает отправки имени значения тела в формате JSON.

Мой сервер. 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?

1 Ответ

1 голос
/ 27 апреля 2020

Согласно документации вы можете передать массив параметров в функцию 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 });
                    }
                );
...