# node扩展组件
# jsonwebtoken token登录认证
cnpm install jsonwebtoken --save
var jwt = require('jsonwebtoken');
var token = jwt.sign({ foo: 'bar' }, 'shhhhh');
--------------------------
var decoded = jwt.verify(token, 'shhhhh');
console.log(decoded.foo) // bar
async login(ctx) {
ctx.verifyParams({
name: { type: 'string', required: true },
password: { type: 'string', required: true },
});
const user = await User.findOne(ctx.request.body);
if (!user) { ctx.throw(401, '用户名或密码不正确'); }
const { _id, name } = user;
const token = jsonwebtoken.sign({ _id, name }, secret, { expiresIn: '1d' });
ctx.body = { token };
}
- 手写中间件认证
const jsonwebtoken = require("jsonwebtoken")
const {serect}= require("../config")
const auth = async(ctx,next)=>{
const{authorization=""}=ctx.request.header
const token =authorization.replace("Bearer ","")
try{
const user =jsonwebtoken.verify(token,secret)
ctx.state.user=user
await next()
}catch(err){
ctx.throw(401,err.message)
}
}
- 手写授权
async checkOwner(ctx,next){
if(ctx.params.id!==ctx.state.user._id){
ctx.throw(403)
}
await next()
}
- 集合koa2中间件使用
//在需要的路由接口上加上认证
router.patch("/:id",auth,checkOwner,update)
# node-fetch
node中发起请求获取数据
cnpm install node-fetch
const fetch = require('node-fetch')
fetch('https://api.github.com/users/github')
.then(res => res.json())
.then(json => console.log(json));
# qs querystringify
qs体积比较大,querystringify比较轻量(一个与JSON兼容的查询字符串解析接口)
cnpm i qs --save
cnpm i querystringify --save
'use strict';
var qs = require('querystringify');
qs.parse('?foo=bar'); // { foo: 'bar' }
qs.parse('#foo=bar'); // { foo: 'bar' }
qs.parse('foo=bar'); // { foo: 'bar' }
qs.parse('foo=bar&bar=foo'); // { foo: 'bar', bar: 'foo' }
qs.parse('foo&bar=foo'); // { foo: '', bar: 'foo' }
qs.stringify({ foo: bar }); // foo=bar
qs.stringify({ foo: bar }, true); // ?foo=bar
qs.stringify({ foo: bar }, '#'); // #foo=bar
qs.stringify({ foo: '' }, '&'); // &foo=