Этот объект пуст внутри функции обратного вызова метода run () - PullRequest
0 голосов
/ 21 октября 2018

Я пишу сервер с использованием NodeJS, Express и SQLite для предоставления сервисов RESTful.

Я хочу создать конечную точку для добавления нового пользователя в базу данных.Конечная точка получает запрос POST с параметрами имя пользователя и пароль и отвечает id только что созданного пользователя.

Согласноnode-sqlite3 пакет документация , когда метод run завершается успешно, объект this внутри функции обратного вызова содержит свойства lastID и changes.

Моя проблемачто, даже если метод run завершился успешно и новый пользователь successfully вставлен в базу данных, объект this пуст.

Что я делаю не так?Как я могу получить доступ к this.lastID?

app.post('/users', (req, res) => {
    const {
        username,
        password
    } = req.body;

    db.get(
        `SELECT id
        FROM Users
        WHERE username = ?`,
        [username],
        (err, row) => {
            if (err) {
                console.error(err);
                return res.sendStatus(500);
            } else if (row) {
                return res.status(400).send('Username already exist.');
            }

            db.run(
                `INSERT INTO Users (username, password)
                VALUES (?, ?)`,
                [username, password],
                (err) => {
                    if (err) {
                        console.error(err);
                        return res.sendStatus(500);
                    }
                    console.log(this); // prints {} to the console
                    res.send(this.lastID); // response body is empty
                }
            );
        }
    );
});

1 Ответ

0 голосов
/ 21 октября 2018

Попробуйте использовать для своей обратной связи функцию function старой школы вместо функции стрелки.Я думаю, что со стрелками функции this не могут быть связаны со значением.

...