# 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=
最后更新: 4/20/2022, 7:56:13 AM