【发布时间】:2019-03-26 14:55:20
【问题描述】:
我在使用 Koa 框架时遇到了一些问题。我正在尝试构建一个非常基本的服务器,因为我的路由器有问题。尽管传入了我的函数,但 ctx 始终返回 404。
一些代码:
//www.js
const Koa = require('koa');
const app = new Koa();
const version = require('./routes/version');
app.listen(config.port, () => {
console.log('Server is listenning on port ' + config.port);
});
app.use(version.routes());
app.use(ctx => {
console.log ('test')
});
//version.js
const Router = require('koa-router');
const router = new Router();
router.prefix('/version');
router.use((ctx, next) => {
ctx.vFactory = new VersionFactory(ctx.app.db);
next();
});
router.get('/', getAllVersions);
async function getAllVersions(ctx, next) {
const ret = await ctx.vFactory.getAllVersions();
ctx.body = JSON.stringify(ret.recordset);
console.log(ctx.body)
await next();
}
我检查了几个线程。大多数情况下,问题似乎来自路由器功能的 await 部分中的非 Promise 功能。这是一个使用 mssql 的简单 DAO,它非常基于 Promise。
class DaoVersion {
constructor(db) {
this.pool = db;
}
async getAllVersions() {
const me = this;
return new Promise((resolve) => {
const ret= me.pool
.query(getVersion);
resolve(ret);
});
}
}
控制台输出看起来不错。我用我的数据库数据设置了我的 ctx.body,但是如果我尝试检查整个上下文,我仍然有 404。更有趣的是,如果我尝试 ctx.res.write(使用默认节点响应)我得到“已经结束”的消息。所以看来 Koa 在传递丢掉我的函数之前已经发送了消息。
知道为什么以及如何纠正它吗?
【问题讨论】: