【发布时间】:2017-08-15 20:00:27
【问题描述】:
我在 expressjs 方面有一点经验。基本上,您使用 req、res 和 next 实现一个函数。
function myMidWare (req, res, next) {
// do mid ware work
next() // call next to trigger next middleware
}
后来,我看到了使用 nodejs 8 的 koa 代码。
这是来自here的一段代码:
var sha1 = require('sha1');
// define a Koa middle ware
module.exports = function(opts){
return function *(next){
var token = opts.token;
var signature = this.query.signature;
var nonce = this.query.nonce;
var timestamp = this.query.timestamp;
var echostr = this.query.echostr;
var str = [token,timestamp,nonce].sort().join('');
var sha = sha1(str);
this.body = (sha === signature) ? echostr + '' : 'failed';
};
}
下面是使用上面定义的 Koa 中间件的 app.js
// app.js - using the Koa middle ware
'use strict'
var Koa = require('koa');
var wechat = require('./wechat/generator');
var config = {
wechat:{
appID:'...',
appSecret:'...',
token:'...'
}
};
var app = new Koa();
app.use(wechat(config.wechat));
app.listen(8080);
然后,我从 MDN 得知 iterator function* 。 function* 声明应该有'yield'关键字,但我在上面代码的生成器函数定义中找不到'yield'关键字。
问题:
为什么他们定义一个没有'yield'关键字的生成器函数?
koa 如何使用生成器函数控制中间件执行顺序?
【问题讨论】:
-
yield 就像一个伪等待。
-
@Jonasw 我理解 await 关键字。为什么这个中间件需要迭代器函数而不是普通函数?
标签: javascript node.js koa