Tag: koa

在koa独立的路由器和控制器

我正在使用koa,我想分开路由器设置和控制器,但困惑“这个”。 let app = require('koa')(); let router = require('koa-router')(); class Controller { constructor () { this.users = ['ron', 'jack']; } getUsersFromDb() { return this.users; } * getUsers () { let users = this.getUsersFromDb(); // failed here, "this" is not the class instance this.body = users; // here "this" is the koa context; } } let […]

获得发电机function的价值,koa

我有一个函数从数据库中抽出一个来自Questions集合的随机问题。 Game_Questions.js – 下面的console.log输出正确的值(我需要的string),所以我认为返回将让yield返回相同的值。 exports.random_Question = function *() { yield Questions.findRandom().limit(1).exec(function(err,question){ console.log("rand q: " + question[0].text); return question[0].text; }); } Game.js: var Game_Questions = require('./backend/Game_Questions'); 在这里我想从上面的代码片段(Game_Questions.js)的random_Question函数访问question[0].text值。 我到目前为止所尝试的是: var found_Question = Game_Questions.random_Question(); var found_Question = Game_Questions.random_Question().next().value; 这两个返回使用JSON.stringify()后的[Object object]显示对象是: {"value":{"emitter":{"domain":null,"_events":{}},"emitted":{},"ended":true},"done":false} 我也尝试使用co(function*())但它也不让我拿出价值。 请帮助如何访问它?

dynamic路线在科阿?

比方说,我有一个看起来像这样的路线数组: var routes = [ { route: '/', handler: function* () { this.body = yield render('home', template.home) } }, { route: '/about', handler: function* () { this.body = yield render('about', template.about) } } ]; 什么是最好的方式来app.use它们? 我尝试过这样做(用koa-route作为我的中间件): Promise.each(routes, function(r) { app.use(route.get(r.route, r.handler)); }).then(function() { app.use(function *NotFound(next) { this.status = 404; this.body = 'not found'; }); }); […]

产量在koa路由

我试图找出在koa路由中使用yield。 举个例子, router.get('/data', function *(next) { this.body = yield someData; }); 如果我想发送一个静态文件,我可以使用koa-send像这样: router.get('/data', function *(next) { yield send(this, 'file.html'); }); 但是,如果我将第二个收益分配给this.body,它不起作用。 那么是什么呢 this.body = yield … 实际上意味着什么,为什么我不需要分配第二个收益的身体?

如何在承诺中设置身体?

在代码中,我想以某种方式改变注释部分应该能够设置文档的身体,而不是“this.body ='test';” (它仍然应该是Promise解决scheme)。 'use strict' var app = require('koa')(), router = require('koa-router')(); router.get('/', function *(next) { this.body = 'test'; // var promise = new Promise(function(resolve, reject) { // resolve("test"); // }); // promise.then(function(res){ // this.body = res; // }) }); app .use(router.routes()) app.listen(8000); 问题在于Promise中的“this”并不是“正确的”。

从KOA中间件内的承诺中调用yield

我正在编写一个KOA中间件,以便从mongo中提取用户信息,如果它没有被caching的话。 我收到以下错误: “this.getUser”函​​数返回一个ES6承诺,如果没有使用请求caching,则从mongo获取用户,或创build一个新的匿名用户。 module.exports = function* securityMiddleware(next) { this.getUser(this.request) .then((user)=>{ if(user.isAonymous){ //throw 401 access error }else{ yield next; } }); }; 这是无效的,因为:jshint说生成器必须有一个yield并抛出一个SyntaxError:意外的严格模式保留字。 你如何在KOA中间件生成器中使用promise? 我正在使用KOA v1.2.0。

如何使用koa-bodyparser在koa中获取查询string?

app.js var bodyParser = require('koa-bodyparser'); app.use(bodyParser()); app.use(route.get('/objects/', objects.all)); objects.js module.exports.all = function * all(next) { this.body = yield objects.find({}); }; 这适用于获取所有对象。 但我想通过查询参数,像这样localhost:3000 / objects?city = Toronto如何在我的objects.js中使用“城市=多伦多”?

如何使用asynchronous/等待承诺答复?

我使用Koa2框架与Nodejs 7和本地asynchronous/等待function。 我试图在promiseparsing后为结果呈现模板( koa-art-template模块)。 const app = new koa() const searcher = require('./src/searcher') app.use(async (ctx) => { const params = ctx.request.query if (ctx.request.path === '/') { searcher.find(params).then((items) => { await ctx.render('main', { items }) }) } }) 我想等待searcher模块获取项目,但Koa给我错误 await ctx.render('main', { items }) ^^^ SyntaxError: Unexpected identifier 如果我将设置为searcher.find(params).then(…)等待,一个应用程序将工作,但不会等待项目。

我可以屈服于一个subprocess,并在Node.js中返回响应吗?

总之,我遇到了一个问题,即对我的Node.js服务器的多个并行GET请求导致服务器“堵塞”并挂起,从而导致客户端超时(503,服务不可用)。 经过大量的性能分析,我意识到这是一个CPU问题。 具体请求(我们称之为GET /foo )通过HTTP查询来自多个服务的数据,然后进行大量计算,并将结果返回给客户端,如下所示: 客户端请求GET /foo /foo控制器通过来自多个其他服务的HTTP查询数据 /foo控制器然后对数据做一堆迭代来为客户端编译一些输出 步骤3需要大约2秒钟才能完成。 但是,如果我将2个请求并行发送到/foo ,则每个客户端将在大约4秒内收到响应。 当我在使用更多内核的集群中运行应用程序时,请求运行速度要快得多,但不是我想要的。 好像我有几个select在这里: 预先计算响应(理想情况是现在要避免这种情况,因为它需要整个“caching失效”scheme),或者 /foo将CPU阻塞计算asynchronous发送到另一个进程(使用Heroku,所以这将是另一个testing),然后我可以使用websocket或其他东西将结果推送到客户端(对于我的情况也是非常复杂的),要么 以某种方式屈服于请求中的subprocess并将结果返回给客户端 会喜欢做选项3.像这样的东西: get('/foo', function*(request) { // I/O, so not blocking the event loop (I think) let data = yield getData(request) // make this happen in a different process let response = yield doSomeHeavyProcessing(data) return response }) 我上面省略了很多实现细节,但是如果有必要知道的话,我正在使用Koa和Node.js 6。 理想情况下, […]

Koa需要永远吗?

当一个页面出现错误时,Koa已经实现了不closuresWeb服务器。 我的问题….这个error handling行为足够强大,以便不再需要在托pipe节点站点时使用Forever?