Articles of koa

如何在另一个生成器函数中访问koa上下文?

在Koa中,我可以通过以下方式访问第一个生成器函数中的Koa Context: app.use(function *(){ this; // is the Context } 但是,如果我屈服于另一个生成器函数,我不能通过this访问上下文了。 app.use(function *(){ yield myGenerator(); } function* myGenerator() { this.request; // is undefined } 我已经能够简单地将上下文传递给第二个生成器函数,但是想知道是否有更简洁的方式来访问上下文。 有任何想法吗?

从iojs升级到nodejs v4.4.4后,自签名SSL不起作用

我在我的应用程序中使用iojs和koa,最近我决定将iojs更新到nodejs v4.4.4。 更新非常顺利,我的应用程序运行得很快。 问题是我在我的开发机器上使用了一个自签名的SSL证书,当我更新到nodejs后,当我尝试访问网站时收到以下消息: 本网站无法提供安全连接 本地主机使用不受支持的协议。 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 客户端和服务器不支持通用的SSL协议版本或密码套件。 这可能是由于服务器需要RC4而导致的,而RC4不再被认为是安全的。 我使用nvm所以我尝试切换到iojs和网站再次工作。 读了一些后,我发现我必须更新openssl到版本1.0.2g而不是我用来创build.key和.crt文件的1.0.1g 。 所以我更新了openssl并生成了如下新的密钥和证书文件: sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt 可悲的是这并没有解决这个问题。 这是我用来在服务器上设置https的代码: let sslOptions = { key: fs.readFileSync('/etc/apache2/ssl/apache.key'), cert: fs.readFileSync('/etc/apache2/ssl/apache.crt') }; let server = require('https').createServer(sslOptions, app.callback()) 难道我做错了什么? 为什么它与iojs一起工作,不能和nodejs一起工作?

如何正确使用Redis和Koa(node.js)

我尝试从redis数据库获取信息,并将其作为响应的主体返回给用户。 首先,这是一个失败的代码: var redis = require("redis"), koa = require("koa"); var app = koa(), port = process.argv[2] || 3000, client = redis.createClient(); app.use(function* (next) { client.get("test", function (err, res) { this.body = res; }); yield next; }); app.listen(port); console.log("listen on port " + port) 肯定是因为收益调用在调用callback之前结束。 那么这里是一个成功的代码: function askRedit (callback) { client.get("test", callback); } app.use(function* (next) { […]

如何调用Koa.js应用程序实例进行unit testing

我不知道我怎么会说这可能是静态调用一个koa路由器? 如果你想从技术angular度谈论这件事,那么在这里看起来是否是我真正想要达到的目标呢? 无论如何,我正在使用koa路由器 ,我编码unit testing(不是集成testing)。 所以我不想在我的应用程序上调用.listen(),因为这个原因…它会创build一个http服务器,现在使我的testing集成testing。 相反,在我的testing中,我只是想直接调用应用程序对象实例并调用一个路线,并能够返回没有结果,并检查我没有在响应中返回结果。 你怎么能这样做? 我无法find一个例子,我已经尝试了各种各样的伪代码尝试再次koa应用程序对象。

自动重新加载Koa服务器

我已经开始玩Koa了 ,但到目前为止一直没有find一个体面的解决scheme,自动重新加载应用程序的代码更改。 我的理解是nodemon是Node宇宙中的首选解决scheme,但由于–harmony标志(Koa要求),我得到错误: $ node_modules/.bin/nodemon /path/to/node-unstable/bin/node app.js /path/to/node-unstable/bin/node –harmony $@ ^^^^^^^ SyntaxError: Unexpected identifier [nodemon] app crashed – waiting for file changes before starting…

在KOA中使用callback与nodejs

最近我正在研究一个新的项目,这个项目在nodejs中使用JavaScriptcallback。 现在我们使用KOA,但是当我们尝试使用ES6生成器和callback函数时会发生问题。 //Calback function function load(callback){ result = null; //Do something with xmla4js and ajax callback(result); return result; } 现在在KOA我需要调用load和响应JSON到客户端,所以我使用下面的代码: router= require('koa-router'); app = koa(); app.use(router(app)); app.get('load',loadjson); function *loadJson(){ var that = this; load(function(result){ that.body = result; }); } 但我得到这个错误: _http_outgoing.js:331 throw new Error('Can\'t set headers after they are sent.'); ^ Error: Can't set headers […]

请求正文在KOA中未定义

我有KOA像下面这样: var koa = require('koa'), bodyParser = require('koa-body-parser'), router = require('koa-router'), app = koa(); app.use(router(app)); app.use(bodyParser()); app.post('http://localhost/get',getit); function *getit(){ console.log(this.req.body); //undefined } 然后通过jquery ajax发送一个post reqeust: var xhr = $.ajax({ type: 'POST', dataType: 'json', contentType: 'application/json', url: 'http://localhost/getit', data: {"name":"me"}, success: function(response) { } }); 但在koa和this.req我无法find我的数据。 在谷歌C​​hrome开发人员工具,我可以看到标题和一切发送好,但我不能看到它在koa。 更新 正确的是: function *getit(){ console.log(this.request.body); //undefined }

在koa中使用快递中间件

我有现成的代码实现了一个快递中间件。 如何在Koa应用程序中使用这个中间件? 当我尝试调用app.use(expressMiddleware)以在我的Koa应用程序中使用中间件时,Koa抱怨发生器函数是必需的: AssertionError: app.use() requires a generator function 所以我想在这里需要一些适配器或技巧…想法?

Koa的`ctx.status`没有被发送到客户端

这是我的简单路线: router.post('/getFile', async (ctx) => { const fileName = `${ctx.request.body.file}.pdf`; const file = fs.createReadStream(fileName); // This file might not exist. file.on('error', (err) => { ctx.response.status = 500; // This status code doesn't make it to client when there's an error. }); ctx.response.type = 'application/pdf'; ctx.response.body = file; }); 这里是我的客户代码: async function main() { const request […]

我可以在自定义(例如/ static /)path中使用koa-static服务资产吗?

https://github.com/koajs/static中的文档以及我个人使用koa-static的经验让我相信,你只能从你的应用的根URL中提供文件。 例如: app.use(serve('./some/dir/')); 鉴于以上使用serve ,访问文件./some/dir/something.txt的URL将是localhost:3000/something.txt 。 似乎没有办法configuration我的应用程序,以便相同的文件(以及同一目录中的所有其他文件)在localhost:3000/static/something.txt 。 我是Node和Koa的新手,所以我刚刚开始深入了解这一点,我可能错过了一些非常明显的东西。 我试图用koa-route来达到这个目的: app.use(route.get('/static/*'), serve(__dirname + '/some/dir')); 但在请求/static/something.txt我遇到了以下情况: TypeError: Cannot read property 'apply' of undefined at Object.<anonymous> (/Users/me/example/src/node_modules/koa-route/index.js:34:18) at GeneratorFunctionPrototype.next (native) at onFulfilled (/Users/me/example/src/node_modules/koa/node_modules/co/index.js:64:19) at /Users/me/example/src/node_modules/koa/node_modules/co/index.js:53:5 at Object.co (/Users/me/example/src/node_modules/koa/node_modules/co/index.js:49:10) at Object.toPromise (/Users/me/example/src/node_modules/koa/node_modules/co/index.js:117:63) at next (/Users/me/example/src/node_modules/koa/node_modules/co/index.js:98:29) at onFulfilled (/Users/me/example/src/node_modules/koa/node_modules/co/index.js:68:7) at /Users/me/example/src/node_modules/koa/node_modules/co/index.js:53:5 at Object.co (/Users/me/example/src/node_modules/koa/node_modules/co/index.js:49:10)