Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript lowdb只更新JSON文件中的一个infos_Javascript_Node.js_Express_Lowdb - Fatal编程技术网

Javascript lowdb只更新JSON文件中的一个infos

Javascript lowdb只更新JSON文件中的一个infos,javascript,node.js,express,lowdb,Javascript,Node.js,Express,Lowdb,我发出了一个更新JSON文件的lowdb请求,但只更新了日期。当我对要更新的信息创建一个console.log时,这就是我要更新的内容: res.on("end", function () { let body = Buffer.concat(chunks); let final = JSON.parse(body); if (final.error !== undefined) {

我发出了一个更新JSON文件的lowdb请求,但只更新了日期。当我对要更新的信息创建一个console.log时,这就是我要更新的内容:

res.on("end", function () {
            let body = Buffer.concat(chunks);
            let final = JSON.parse(body);
            if (final.error !== undefined) {
                console.log("Initial authentication:", final.error_description, "Please refresh the authentication grant");
                extAuthCallback(84);
            } else {
                tokens.set('access_token', final.access_token)
                    .set('expires_in', final.expires_in)
                    .set('refresh_token', final.refresh_token)
                    .set('refresh_date', moment())
                    .write()
                console.log(final, tokens.value())
                extAuthCallback(1);
            }
        });
我的最终变量的console.log:

{
  access_token: 'oa_prod_iq00cRPk5Jhh4VffSHlDj7DEDsSIlpCRRczI3l3ASC0',
  token_type: 'bearer',
  expires_in: 2399,
  refresh_token: 'oa_prod_nIjBZs74xGvJXi1B-wdMyITfxGyklpCRRczI3l3ASC0'
}
请求后我的JSON文件的console.log:

{
  access_token: 'oa_prod_pB9Q0FFM9Tk4c5n3HMRBFKAVz6naiJ-jmb3QCeBrT00',
  expires_in: 2399,
  refresh_token: 'oa_prod_nX3EDs530SM8eHv_fM5BN7-5RLBwkrKoUi6uExBbTY4',
  refresh_date: '2020-11-28T23:31:13.855Z',
  primary_autorization_date: '2020-11-29T00:40:58.421Z'
}
修改后的我的JSON文件:

{
  "access_token": "oa_prod_pB9Q0FFM9Tk4c5n3HMRBFKAVz6naiJ-jmb3QCeBrT00",
  "expires_in": 2399,
  "refresh_token": "oa_prod_nX3EDs530SM8eHv_fM5BN7-5RLBwkrKoUi6uExBbTY4",
  "refresh_date": "2020-11-28T23:31:13.855Z",
  "primary_autorization_date": "2020-11-29T00:40:58.421Z"
}

因此,它只有
主要自动化\u日期
字段更改…

您应该使用
设置
而不是
更新

tokens.set('access_token', final.access_token)
    .set('expires_in', final.expires_in)
    .set('refresh_token', final.refresh_token)
    .set('refresh_date', moment())
    .write()
update方法是这样一个函数

db.update('test1', (n) => 5555)
  .update('test2', (n) => n + 1)
  .write()
如果使用
设置
,只需为其赋值即可

db.set('test1', 5555).set('test2', 3333).write()
当您使用
矩时,有两种方法可以使用

// Way 1 with moment()
db.set('date', moment()).write()

// Way 2 with moment
db.update('date', moment).write()
因此,解决方案是:

我调用另一个文件中包含HTTP请求的函数,如下所示:

app.get('/', async function(req, res) {
    const access_token = req.query.code;
    if (access_token) {
        let authentication = await asyncExtAuth(access_token);
        if (authentication == 84)
            return res.send({error: "Please give a valid access_token"});
        res.sendFile(path.join(__dirname + '/success_page/index.html'));
        db.set('access_token', access_token).write()
        tokens.set('primary_autorization_date', moment()).write()
        console.log("Access Token successfully refreshed")
    }
    else
        res.send({error: "Please specify an access token"})
})
在其中,我第二次修改文件时使用了
tokens.set('primary\u autorization\u date',moment()).write()行
。通过这样做,lowdb不考虑之前所做的修改,而是使用之前包含的信息重新修改我的文件。解决方案是在修改文件以更新缓存之前添加行
tokens.read()

app.get('/', async function(req, res) {
    const access_token = req.query.code;
    if (access_token) {
        let authentication = await asyncExtAuth(access_token);
        if (authentication == 84)
            return res.send({error: "Please give a valid access_token"});
        res.sendFile(path.join(__dirname + '/success_page/index.html'));
        db.set('access_token', access_token).write()
        tokens.read()
        tokens.set('primary_autorization_date', moment()).write()
        console.log("Access Token successfully refreshed")
    }
    else
        res.send({error: "Please specify an access token"})
})

所以,是的,一开始我使用的是
.set
,但它没有改变JSON文件中的任何内容。当我对
tokens.value()
做了一个console.log时,我意识到它被修改了,但是修改没有出现在我的JSON文件中……你把这个文件
primary\u autorization\u date
写在哪里?我没有看到任何要
设置
更新
此字段的代码。我找到了解决方案,我在1小时内对其进行了修订。谢谢你的帮助!不客气。