如何拿到token傳回給前端
伺服器代碼如下var express = require('express');
var router = express.Router();
var request = require('request');
var redis = require('redis');
var util = require('util');
var moment = require('moment');
var mongoose = require('mongoose');
var User = require('../models/User');
router.get('/', function (req, res, next) {
res.render('index', {
title: 'Express'
});
});
//小程式配置
var config = {
'AppID': '我的appid',
'AppSecret': '我的appsecret'
};
//生成token
function createToken() {
const chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
const length = chars.length;
let str = "";
for (let i = 0; i < length; i++) {
str += chars.substr(Math.round(Math.random() * length), 1);
}
return str;
};
router.get('/login', function (req, res, next) {
var nickname = req.query.nickName;
var head_img = req.query.head_img;
var code = req.query.code;
var param = {}
param.nickname = nickname;
param.head_img = head_img;
param.code = code;
param.creatAt = moment().format('YYYY-MM-DD HH:mm:ss');
request.get({
url: 'https://api.weixin.qq.com/sns/jscode2session',
json: true,
qs: {
grant_type: 'authorization_code',
appid: config.AppID,
secret: config.AppSecret,
js_code: code
}
}, function (err, res, data) {
if (res.statusCode === 200) {
User.findOne({
openid: data.openid
}).then(function (info) {
if (info) {
console.info('使用者已經存在');
console.info(info.token)
return res.send(token);
} else {
var user = new User({
openid: data.openid,
nickName: param.nickname,
avatarUrl: param.head_img,
creatAt: param.creatAt,
token: createToken()
})
return user.save();
}
})
} else {
console.info('[error]', err)
res.json(err);
}
})
})
module.exports = router;
小程式的邏輯如下App({
onLaunch: function () {
//調用api從本地緩存中擷取token
var token = wx.getStorageSync('token') || '';
console.info('從本地緩存中擷取token資料')
if(token == null || token == ''){
var that = this;
console.info('token is null');
that.login();
}else{
console.info('token is not null');
// that.queryUserInfo(token);
}
},
//登入接口,登陸成功後設定全局使用者資訊
login:function(){
//擷取授權碼code
wx.login({
success: function (res) {
console.info('授權碼code')
var code = res.code;
console.info(code);
if (code) {
//擷取使用者資訊接口
wx.getUserInfo({
success: function (res) {
var userInfo = res.userInfo;
// this.globalData.userInfo = userInfo;
console.info(userInfo)
var nickName = userInfo.nickName;
var avatarUrl = userInfo.avatarUrl;
//調用後端登入接口
wx.request({
url: 'http://127.0.0.1:3000/login',
data: {
code: code,
nickName: nickName,
head_img: avatarUrl
},
success:function(res){
console.info('請求成功')
console.info(res);
}
})
}
})
} else {
console.info('擷取使用者登入憑證失敗');
}
}
})
},
globalData: {
userInfo: null
}
})
小程式的第42行代碼無法執行,也就是無法列印請求成功
資料庫使用的是mongodb。