参考文章:Node.js access_token的获取、存储及更新
https://www.cnblogs.com/hvkco...

和node.js与微信小程序后盾数据库的交互(1)获取accesstoken 相比,咱们前进一步,把获取的accesstoken保留到服务器上。
咱们先在node.js的服务启动根目录下创立一个wechat子目录,在该子目录下创立一个名为access_token.json的文件,文件内容为:

{"access_token":"","expires_time":0}

别离保留accesstoken和过期工夫。

为了下一步应用express设置拜访路由,咱们把node.js与微信小程序后盾数据库的交互(1)获取accesstoken 中的程序修改为应用express的模式:

// token.jsconst http = require('http');const request = require('request');var urltool = require('url');  var fs = require('fs'); //引入 fs 模块var accessTokenJson = require('./wechat/access_token');//引入本地存储的 access_tokenconst hostIp = '127.0.0.1';const apiPort = 6060;const data={ appid:"wx4$%#%#%#",//你的微信小程序的appid secret:"@##¥¥……¥##R¥",//你的微信小程序的appsecret grant_type:"client_credential", env:"^%$#^@^" //你的微信小程序的环境参数};var express = require('express');var app = express();app.get('/', function (req, res) {  console.log("***************************************")  console.log('[申请]来自='+req.url);  getAccessToken(res);}) function getAccessToken(res){  //获取以后工夫   var currentTime = new Date().getTime();  const url='https://api.weixin.qq.com/cgi-bin/token?appid='+data.appid+'&secret='+data.secret+'&grant_type='+data.grant_type;  var contentText = fs.readFileSync('./wechat/access_token.json','utf-8');  //减少这两句就能够手工批改access_token.json的expires_time来刷新accesstoken  accessTokenJson = JSON.parse(contentText)  if(accessTokenJson.access_token === "" || accessTokenJson.expires_time < currentTime){    request({      url: url,//申请门路      method: "GET",//申请形式,默认为get      headers: {//设置申请头          "content-type": "application/json",      },      body: JSON.stringify(data)//post参数字符串  将对象转JSON    }, function(error, response, body) {      if (!error && response.statusCode === 200) {        var obj = JSON.parse(body); //将JSON字符串转为对象        accessTokenJson.access_token = obj.access_token;        accessTokenJson.expires_time = new Date().getTime() + (parseInt(obj.expires_in) - 200) * 1000;        //更新本地存储的        fs.writeFile('./wechat/access_token.json',JSON.stringify(accessTokenJson),(err)=>{console.log("write OK")});        //编码类型        res.setHeader('Content-Type', 'text/plain;charset=UTF-8');        //容许跨域        res.setHeader('Access-Control-Allow-Origin', '*');        //返回代理内容        var rtnJSON = JSON.stringify(accessTokenJson)        console.log("返回数据:"+rtnJSON)        res.end(rtnJSON);      }   });  }else{    res.setHeader('Content-Type', 'text/plain;charset=UTF-8');    //容许跨域    res.setHeader('Access-Control-Allow-Origin', '*');    //返回代理内容    var rtnJSON = JSON.stringify(accessTokenJson)    console.log("返回数据:"+rtnJSON)    res.end(rtnJSON);  }}var server = app.listen(apiPort, function () {  console.log('代理接口,运行于 http://' + hostIp + ':' + apiPort + '/'); })

微信小程序的accesstoken默认是7200秒过期,因而咱们的程序在7000秒后从新获取新的accesstoken并保留到文件中。
启动token.js服务:

node token.js

在浏览器中拜访 127.0.0.1:6060并刷新,咱们会发现返回的accesstoken不会变动。咱们期待2小时后再刷新,或者批改access_token.json的expires_time为0后再刷新,会发现accesstoken扭转了,这样就实现了咱们的目标。
留神:如果咱们不手动批改access_token.json文件

var accessTokenJson = require('./wechat/access_token');

下面这句就能够了,不过下面这句如果咱们手动批改了access_token.json后不会再次执行,所以咱们加上

 var contentText = fs.readFileSync('./wechat/access_token.json','utf-8');  //减少这两句就能够手工批改access_token.json的expires_time来刷新accesstoken  accessTokenJson = JSON.parse(contentText)

这样每次读取accesstoken的时候都会去读access_token.json文件,理论部署的时候能够把这两句去掉。