为了账号安全,请及时绑定邮箱和手机立即绑定

lowdb 仅更新 JSON 文件中的一项信息

lowdb 仅更新 JSON 文件中的一项信息

慕容3067478 2023-09-14 20:47:02
我发出 lowdb 请求来更新 JSON 文件,但仅更新日期。当我制作要更新的信息的 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"}所以它只是primary_autorization_date改变了领域......
查看完整描述

2 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

您应该使用set而不是update.


tokens.set('access_token', final.access_token)

    .set('expires_in', final.expires_in)

    .set('refresh_token', final.refresh_token)

    .set('refresh_date', moment())

    .write()

更新方法接受这样的函数。


db.update('test1', (n) => 5555)

  .update('test2', (n) => n + 1)

  .write()

如果使用set,则只需为其赋值即可。


db.set('test1', 5555).set('test2', 3333).write()

当您使用 时moment,有两种方法可以使用。


// Way 1 with moment()

db.set('date', moment()).write()


// Way 2 with moment

db.update('date', moment).write()


查看完整回答
反对 回复 2023-09-14
?
森林海

TA贡献2011条经验 获得超2个赞

所以解决办法是:


我在另一个文件中调用包含 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_autorization_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"})

})


查看完整回答
反对 回复 2023-09-14
  • 2 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信