【问题标题】:[Koa]404 while passing throught the routeur[Koa]404 通过路由器
【发布时间】: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 在传递丢掉我的函数之前已经发送了消息。

知道为什么以及如何纠正它吗?

【问题讨论】:

    标签: node.js koa


    【解决方案1】:

    Koa 默认 response.status 代码为 404,不像 node 的 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()
    }
    

    【讨论】:

    • 是的,我知道默认的 404。我尝试删除我的 DAO 调用并简单地向 ctx.body 添加一个分配,它可以正常工作。只要我添加一个异步调用,我就会得到一个 404。我的对象中一定有一些东西 Kao 不喜欢。我试着搬快递去测试,第一次工作。我明天试试你的方法,看看会不会有什么改变。
    • 所以,我尝试改变函数的调用方式。还是同样的问题。我想我会坚持使用 Express。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多