[Koa] 404通过路线时

时间:2018-10-22 13:44:48

标签: node.js koa

我在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已在传递传递我的函数之前发送了消息。

有什么主意,为什么以及如何纠正呢?

1 个答案:

答案 0 :(得分:0)

Koa默认的response.status代码为404,这与节点的res.statusCode默认为200不同。

Koa将默认状态码更改为200-当您的路由设置为ctx.body的非空值时,或者在某些情况下,您可以使用ctx.status =手动更改(例如,如果需要将其设置为202) xxx。

您可以使用此文档作为参考:https://github.com/koajs/koa/blob/master/docs/api/response.md

此外,您的路由应为异步功能:

router.get('/', async(ctx, next) => {

   ctx.body = await getAllVersions
   await next()
}