У меня проблемы с каркасом Коа.Я пытаюсь построить довольно простой сервер, у меня проблемы с роутером.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();
}
Я проверил несколько потоков.В большинстве случаев проблема возникает из-за функции, не основанной на Promise, в части ожидания функции маршрутизатора.Вот простой DAO, использующий mssql, основанный на обещаниях.
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 (используя ответ узла по умолчанию), я получаю "ужеконец "сообщение.Таким образом, кажется, что Коа послал сообщение, прежде чем передать мне свою функцию.
Есть идеи, почему и как я мог это исправить?