Node.js 节点sqlite插入在not null约束上失败,但数据是否存在?

Node.js 节点sqlite插入在not null约束上失败,但数据是否存在?,node.js,sqlite,express,promise,Node.js,Sqlite,Express,Promise,作为expressjs服务的一部分,我的nodejs应用程序中有以下代码: let db = sqlite.open(conf.database, { Promise }).then( (dba) => { P.all([dba.exec(accesslog_ddl),dba.exec(tokens_ddl)]).then(()=>{ console.log("Database initialized ..."); }); return dba

作为expressjs服务的一部分,我的nodejs应用程序中有以下代码:

let db = sqlite.open(conf.database, { Promise }).then( (dba) => {
    P.all([dba.exec(accesslog_ddl),dba.exec(tokens_ddl)]).then(()=>{
        console.log("Database initialized ...");
    });
    return dba;
});

let upsertToken = function (token, expire, customer) {
    return db.then(d=>{
        console.log(`${token}, ${expire}, ${customer}`);
        return d.exec("insert into tokens (tokenid, name, email, cell, expire) values (?,?,'none','none','never')",
            [token,expire]);
    });
};

// ... expressjs setup ...

router.post('/tokens',(req,res) => {
    tokens.addToken(req.body.token, req.body.expires, req.body.name)
    .then(() => {res.status(201).send()})
    .catch((e) => {res.status(500).send(e)});
});
日志中的输出如下所示:

bluhbleh, never, fred flintstone
{ [Error: SQLITE_CONSTRAINT: NOT NULL constraint failed: tokens.name] errno: 19, code: 'SQLITE_CONSTRAINT' }
POST /services/tokens 500 20.287 ms - 2
这证明了
令牌
过期
客户
在调用
exec()
之前都存在,但调用由于非空约束失败而失败

关于此代码,有一些奇怪的事情:

  • 我用的是promisified
  • 我用的是promisified
  • 我真的是一个新的承诺(和nodejs一般),并可能没有做一些正确的事情
  • 我的完整代码如下:

    您使用的
    exec
    错误。的版本只接受一个参数,即要执行的SQL。

    D'oh!错过了。奇怪的是,exec不允许参数化sql。切换到
    .run()
    ,现在工作得更好了。