view和action用session传值_用nonde写微信小程序后台的一些记录

86b4444898ff1236f7c44cf78ccdcb0f.png

1在项目下新建 server文件夹
创建package.json
package.json里面两个是必须的
{
"name": "",
"version": ""
}
因为npm install xxx(就是name的包名),name不允许出现大写,因为怕包与包有重复,
version 因为是 npm install vue @x.x.x(x.x.x就是版本号)因为有不同的版本号所以也是必须的
2.下载koa及koa-router
npm install koa; npm install koa-router;
3.搭建服务器
const Koa = require('koa');
const KoaRouter = require('koa-router');
// 实例化路由
const app = new Koa();;
const router = new KoaRouter();
router.get('/', async(ctx, next) => {
// 处理路由
ctx.body = '服务器返回的数据'
});
// 使用路由器及路由
app.
use(router.routes()) // 声明使用路由
.use(router.allowedMethods());
pp.use(router.allowedMethods());
/*
* router.allowedMethods()作用: 这是官方文档的推荐用法,我们可以
* 看到 router.allowedMethods()用在了路由匹配 router.routes()之后,所以在当所有
* 路由中间件最后调用.此时根据 ctx.status 设置 response 响应头
*
*/
app.listen(3000); // 监听端口
---------------------------------------------------------------------------------------------------------------------------
get请求获取参数
/*在 koa2 中 GET 传值通过 request 接收,但是接收的方法有两种:query 和 querystring。
query:返回的是格式化好的参数对象。
querystring:返回的是请求字符串。*/
//获取get传值
//http://localhost:3000/newscontent?aid=123;
router.ger('/newscontent', async(ctx, next) => {
// 从ctx中读取get请求参数
console.log(ctx.query); // {aid: '123'} 获取的是对象,用的最多**推荐
console.log(ctx.querystring); // aid=123&xx=xxx 获得的是一个字符串
console.log(ctx.url); // 获得的是一个url地址
//ctx里面的request里面获取get传值
console.log(ctx.request.url);
console.log(ctx.request.query); //{ aid: '123', name: 'zhangsan' } 对象
console.log(ctx.request.querystring); //aid=123&name=zhangsan
});
动态路由
//请求方式 http://域名/product/123
router.get('/product/:aid',async (ctx)=>{
console.log(ctx.params); //{ aid: '123' } //获取动态路由的数据
ctx.body='这是商品页面';
});
使用koa-router :
1. 路由导航
2. get请求获取参数 (ctx.query)
3. 动态路由及其获取参数(/product/:id ctx.params.id)
pos请求参数
1.先安装koa-bodyparser包
npm instal koa-bodyparser --save
const Koa = require('koa');
const bodyParser = require('koa-bodyparser');
const app = new Koa();
app.use(bodyParser());
app.use(async(ctx, next)=> {
ctx.body= ctx.request.body; // h获得post请求参数ctx.request.body
});
app.listen(3000, ()=> {
console.log('服务器启动了')
})
-----------------------------------------------------------------
/searchBook?req=react
每次服务器修改东西则需要重启服务器则可以按照nodemon这个包,具体安装方法:
npm install nodemon -g
则运行nodemon xxx.js (你要运行的文件例如:server.js);
它类似npm的热更新,不需要重启服务器则可以自动更新
当然你不想总是nodemon xxx.js操作,毕竟感觉太low,B格太低.则可以配置命令行,
在package.json 中增加scripts配置, 则下次只需npm run test 即可。
"scripts": {
"test": "nodemon server.js"
}
微信小程序获得 用户唯一标识 OpenID 和 会话密钥 session_key,很有意思
官网的话也特别有意思:
调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。
调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key。
看完一脸懵逼,看他官网推荐的图稍微好点,官网地址:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
具体步骤:
前端:
1.wx.login()获得code;
2.wx.request()请求后台接口,并发送接到的code给后台;
后台:
拿到code后,然后和appid、appSecret,通过get请求微信后台接口,
请求连接GET hittps://http://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code,由于后台用的node搭建的服务器,则推荐安装
flyio这个请求插件(类似于vue中的axios,支持promis,github搜索fly即可)
具体使用方式:
npm install flyio;
文件中引入
// Node 入口
var Fly=require("flyio/src/node")
var fly=new Fly;
fly.get('/user?id=133')
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
此处不建议这么写,毕竟以后的代码逻辑都要写到then返回的函数中,不优雅
建议 let getUserInfo = await fly.get('/user?id=133');
当然在包裹他的函数上要加上async要不然会报错。
请求腾讯后台之后可以到
openid string 用户唯一标识
session_key string 会话密钥
此时最好把openid存储到数据库,并把它作为主键便于检索
拿到之后肯定不能给直接返回前端,毕竟为了安全,微信官网也说要自定义登录状态,与openid、session_key关联,此时又是一脸懵逼不是,大白话来说就是让你加下密然后在返给前端,
加密:node后台推荐jsonwebtoken 这个插件,具体做法如下:
npm install jsonwebtoken;
使用方法:
var jwt = require('jsonwebtoken');
jwt.sign('要加密的部分', '自定义加密字符串');
例:var token = jwt.sign({ foo: 'bar' }, 'shhhhh');
加完密之后,根据腾讯官网,返回自定义登录状态,大白话就是返回给前端 ctx.body= xxxx;xxx就是你加密的
前端收到之后,自定义登录状态存入storage,
然后以后wx.request()发起业务请求携带自定义登录状态,可以建议配置到请求头里面authoriation里面,然后每次后台都通过查询openid和session_key返回给前端数据(当然肯定先要校验openid是否合乎规范,如果不合规范则不让请求);
var decoded =jwt.verify(ctx.header.authoriation, 'shhhhh');(对请求头里面加密的数据进行解析,这个地方可能解析成功,也可能解析失败);
所以建议用
try{
var decoded =jwt.verify(ctx.header.authoriation, 'shhhhh');(对请求头里面加密的数据进行解析,这个地方可能解析成功,也可能解析失败;
if (decoded.openid) { // 进行业务逻辑处理
}
} catch {
ctx.body = {
data: [],
state: 'fail,
msg: '用户不合法!'
}
}
写到最后建议多用 promis 及async、await 这些可以简化代码,使代码变得优雅,容易懂。
至此关于微信小程序的登录openid获取就结束了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值