koa-middleware
code (app.js)
//https://www.youtube.com/watch?v=RVxx2T7SPw8
var koa = require('koa');
var parse = require('co-body');
var r = require('rethinkdbdash')();
var _ = require('koa-route');
var fs = require('co-fs');
var jwt = require('jsonwebtoken');
var logger = require('koa-logger');
var app = koa();
app.use(logger());
var responseTime = require('koa-response-time');
app.use(responseTime());
var mongo = require('koa-mongo');
app.use(mongo({
uri:'mongodb://admin:123456@localhost:27017'
}));
//jwt middleware
app.use(function *(next){
if(!this.url.match(/\/$|\/session$/)){
var token = this.get('x-auth-token');
try{
var jwtPayload = yield function(callback){
jwt.verify(token,'secret',callback);
};
this.userId = jwtPayload.userId;
} catch (e){
e.status = 401;
throw e;
}
}
yield next;
console.log('exiting middleware');
});
app.use(_.get('/',function*(){
this.type = 'text/html';
this.body = yield fs.readFile('index.html');
}));
app.use(_.post('/session',function *(){
var creds = yield parse(this);
var users = yield r.table('usres').getAll(
creds.username, {index : 'username'}
).run();
var user = users[0];
if(user && user.password === creds.password){
this.status = 200;
this.set('x-auth-token',
jwt.sign({userId : user.id}, 'secret')
);
} else {
var e = new Error('invalid credentials');
this.status = 401;
throw e;
}
}));
app.listen(3000);
//node --harmony app.js
1 回复
早起到公司 看看Youtube的视频教程,每天进步一点点。 [今天北京的雨下的是真大啊😄]