问题标签 [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.
error-handling - Koa 发生错误时显示自定义页面
这是问题的背景:我正在使用Koa 2跟踪开球 koa。但是开球中的练习是为 Koa 1 设计的。我为 Koa 2 的这个问题创建了一个问题:Koa 2的错误处理程序的任务无法通过。
简而言之,我的问题是如何在发生 500 错误时显示自定义错误页面。
以下是代码:
但我的错误页面始终显示为“内部服务器错误”,这是默认消息。似乎ctx.body = 'Oops! internal server error';
无法修改页面。
感谢您的帮助!
node.js - 测试 NodeJS API 时如何模拟外部服务
我有用 koa 构建的 JSON API,我试图用集成测试来覆盖它。
一个简单的测试如下所示:
现在问题来了,当控制器背后的操作 - 比如说 POST /users 处的 saveUser - 使用外部资源时。例如,我需要验证用户的电话号码。
我的控制器如下所示:
我希望能够模拟ctx.repo
请求对象,但我似乎无法从测试中获得它,这意味着我的测试实际上是在使用电话号码验证服务。
有什么方法可以绕过该验证服务吗?
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';
。但是,我没有做到这一点。
谢谢你的帮助!
javascript - Koa-session 在附加对象后被重置?
我有一个控制器,它查找一个角色,然后用它做一些事情,控制器看起来像:
当它处理时,ctx.session.foundChar = foundChar
它似乎出于某种原因重置了我的会话,并且记录会话显示{}
而不是
但如果我改变ctx.session.foundChar = "Hello";
< 工作得很好。
我不知道会话是否存在数据限制或其他问题,或者这不是问题,express-session
但我正在尝试将其全部转换为 Koa,无论如何我不确定为什么我的会话会被重置。
foundChar
外观示例
所以这会正确记录,但是在刷新页面后我不再经过身份验证并且ctx.session
是{}
javascript - 带有 Koa 2.0 的 Webpack-hot-middleware
有没有办法将 webpack-hot-middleware 和 webpack-dev-server 与 Koa 集成?我很难找到工作示例,它不是 webpack-hot-middleware 代码的最新分支。
koa - 带有 koa2 的 REST API。多个路由器的公共前缀
我有两个实体,用户和员工。所以我想在不同的端点上都使用 CRUD,但它们都将安装在“api”下,所以我可以定义 api_v1、api_v2 等等。端点将类似于:
我的两条路线都无法获得“api”前缀。无法让它与 koa-mount 一起使用。
我的文件:
服务器.js
users.js (employees.js 也一样)。
reactjs - 如何将值传递给 Koa2
我有一个反应应用程序,我想将价值传递给 koa 服务器。
下面是我的服务器代码
只是无法获得从客户端传递下来的价值。你们知道是怎么回事吗?
koa - 为什么在 koa 上需要多个密钥?
抱歉,我不太明白 koa 中的密钥是如何工作的。在 koa 中,对象keys
上有一个字段app
,它将像这样使用:
然后,在使用koa-csrf
中间件时,默认情况下内置csrf.middleware
不使用app.keys
. 如果我使用默认中间件,我需要创建另一个在会话中设置密钥的中间件。
当我使用 Flask 时,我只需要提供一个由string
非array
. 为什么需要多个密钥?整个应用程序只使用一个还不够吗?
mongoose - 猫鼬 findbyId 内部错误
我正在使用 Koa 2 和 koa-router。
路由器文件:
如果我转到 url http://localhost:3000/api/users/得到结果是好的:
但是,如果我在浏览器中执行 get by idhttp://localhost:3000/api/users/56bc57c48cc9e78b4ce61206
没有任何反应,也没有错误。浏览器只是加载我之前的网页。
如果我将 id 更改为一个不存在的 id,我会在浏览器中收到内部错误。它在终端中显示:
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 我总是在浏览器中得到 {}。也许这就是原因,错误是空的。但为什么?