猿问

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

我发出 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改变了领域......


慕容3067478
浏览 133回答 2
2回答

跃然一笑

您应该使用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 momentdb.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_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"})})
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答