天天看點

express微信小程式伺服器,基于express架構實作小程式登入

如何拿到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。