问题标签 [koa2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2760 浏览

error-handling - Koa 发生错误时显示自定义页面

这是问题的背景:我正在使用Koa 2跟踪开球 koa。但是开球中的练习是为 Koa 1 设计的。我为 Koa 2 的这个问题创建了一个问题:Koa 2的错误处理程序的任务无法通过

简而言之,我的问题是如何在发生 500 错误时显示自定义错误页面。

以下是代码:

但我的错误页面始终显示为“内部服务器错误”,这是默认消息。似乎ctx.body = 'Oops! internal server error';无法修改页面。

感谢您的帮助!

0 投票
2 回答
1704 浏览

node.js - 测试 NodeJS API 时如何模拟外部服务

我有用 koa 构建的 JSON API,我试图用集成测试来覆盖它。

一个简单的测试如下所示:

现在问题来了,当控制器背后的操作 - 比如说 POST /users 处的 saveUser - 使用外部资源时。例如,我需要验证用户的电话号码。

我的控制器如下所示:

我希望能够模拟ctx.repo请求对象,但我似乎无法从测试中获得它,这意味着我的测试实际上是在使用电话号码验证服务。

有什么方法可以绕过该验证服务吗?

0 投票
1 回答
923 浏览

typescript - 针对 ES6 时 Typescript 中的外部模块

随着 Typescript 1.7 和 async/await 支持的发布,我认为现在是尝试使用 koa@2 的 Typescript 的好时机。

我有一个非常简单的设置,它已经可以工作了:

因为koa不是用Typescript写的,所以只好做了一个小定义文件:

这一切在 IDE 中运行良好(没有错误,自动完成也可以)。但是,当我将 (target => ES6) 编译为 Javascript 时,编译后的文件无法执行:

当我尝试运行它时,我收到以下错误:

它不起作用,因为 koa_1.default() 不是函数,它应该只是 koa_1()。(我也不确定为什么它会这样重命名变量)。如果我在生成的 app.js 中进行这个简单的更改,一切正常。

我正在阅读许多与打字稿和外部模块相关的文章,但我似乎仍然错过了一些东西。我在其中一个网站上找到了这个例子:source

这种解释了为什么要添加 .default,但据我了解,它是在错误的情况下进行的。(当我这样做时不需要它import Koa from 'koa';,但是当我这样做时import * as Koa from 'koa';

当我将 app.ts 中的 import 语句更改为import * as Koa from 'koa';生成的 app.js 时有效,但 Typescript 编译器和 IDE 给了我以下错误。

所以目前,我可以选择我的开发环境是否有效,或者生成的 Javascript 是否有效,但不能同时选择两者。

处理这个问题的最佳方法是什么?

我认为最简单的方法是将 koa.d.ts 定义文件更改为 match import * as Koa from 'koa';。但是,我没有做到这一点。

谢谢你的帮助!

0 投票
1 回答
1201 浏览

javascript - Koa-session 在附加对象后被重置?

我有一个控制器,它查找一个角色,然后用它做一些事情,控制器看起来像:

当它处理时,ctx.session.foundChar = foundChar它似乎出于某种原因重置了我的会话,并且记录会话显示{}而不是

但如果我改变ctx.session.foundChar = "Hello";< 工作得很好。

我不知道会话是否存在数据限制或其他问题,或者这不是问题,express-session但我正在尝试将其全部转换为 Koa,无论如何我不确定为什么我的会话会被重置。

foundChar外观示例

所以这会正确记录,但是在刷新页面后我不再经过身份验证并且ctx.session{}

0 投票
3 回答
2708 浏览

javascript - 带有 Koa 2.0 的 Webpack-hot-middleware

有没有办法将 webpack-hot-middleware 和 webpack-dev-server 与 Koa 集成?我很难找到工作示例,它不是 webpack-hot-middleware 代码的最新分支。

0 投票
2 回答
2324 浏览

koa - 带有 koa2 的 REST API。多个路由器的公共前缀

我有两个实体,用户和员工。所以我想在不同的端点上都使用 CRUD,但它们都将安装在“api”下,所以我可以定义 api_v1、api_v2 等等。端点将类似于:

我的两条路线都无法获得“api”前缀。无法让它与 koa-mount 一起使用。

我的文件:

服务器.js

users.js (employees.js 也一样)

0 投票
1 回答
525 浏览

reactjs - 如何将值传递给 Koa2

我有一个反应应用程序,我想将价值传递给 koa 服务器。

下面是我的服务器代码

只是无法获得从客户端传递下来的价值。你们知道是怎么回事吗?

0 投票
1 回答
3712 浏览

koa - 为什么在 koa 上需要多个密钥?

抱歉,我不太明白 koa 中的密钥是如何工作的。在 koa 中,对象keys上有一个字段app,它将像这样使用:

然后,在使用koa-csrf中间件时,默认情况下内置csrf.middleware不使用app.keys. 如果我使用默认中间件,我需要创建另一个在会话中设置密钥的中间件。

当我使用 Flask 时,我只需要提供一个由stringarray. 为什么需要多个密钥?整个应用程序只使用一个还不够吗?

0 投票
1 回答
267 浏览

mongoose - 猫鼬 findbyId 内部错误

我正在使用 Koa 2 和 koa-router。

路由器文件:

如果我转到 url http://localhost:3000/api/users/得到结果是好的:

但是,如果我在浏览器中执行 get by idhttp://localhost:3000/api/users/56bc57c48cc9e78b4ce61206 没有任何反应,也没有错误。浏览器只是加载我之前的网页。

如果我将 id 更改为一个不存在的 id,我会在浏览器中收到内部错误。它在终端中显示:

0 投票
1 回答
313 浏览

mongodb - 猫鼬 findbyId 内部服务器错误

我有一组用户:

请注意,最后一个没有Object_id,仅用于我的测试。我正在使用 Koa2 并使用 async /await 虽然我认为它没有影响。我的路线安装在/api/users上,如下所示:

当我加载http://localhost:3000/api/users时,我的所有用户都会显示出来。

当我加载http://localhost:3000/api/users/56d9f3435ce78127510332ea 时,只显示该用户。

但是....当我加载http://localhost:3000/api/users/56bc57c4ea0ba50642eb0418我得到内部服务器错误。

如果我加载http://localhost:3000/api/users/whatever我也会得到内部服务器错误

所以我的问题是:findById 总是期待一个 Object_id?如果这个 Object_id 不再在集合中,它不应该返回 404 吗?

如果我使用自己的 ID 导入数据会怎样?我不能使用 findById 方法吗?即使我评论了这一行?let id = ObjectId(ctx.params.id);

我不应该收到 404 错误吗?

如果我将 ctx.throw (500) 更改为 ctx.body = err 我总是在浏览器中得到 {}。也许这就是原因,错误是空的。但为什么?