0

我正在使用 NodeJS、Express 和 SQLite 编写服务器以提供 RESTful 服务。

我想创建一个端点来将新用户添加到数据库中。端点接收带有参数usernamepassword的 POST 请求,并以新创建的用户的id进行响应。

根据node-sqlite3文档,当run方法成功时,this回调函数内的对象包含属性lastIDchanges.

我的问题是,即使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
                }
            );
        }
    );
});
4

1 回答 1

2

尝试使用老式function而不是箭头函数进行回调。我认为箭头函数this不能绑定到一个值。

于 2018-10-21T15:41:25.017 回答