问题标签 [koa-router]

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 投票
0 回答
33 浏览

typescript - 一种更清洁的方式,如何重构异步调用

我有以下端点

我想知道是否有一种“更清洁”的方式来做同样的事情。即如何使用解构、速记等来重构它?

0 投票
1 回答
2628 浏览

vuejs2 - 重定向后 Koa ctx.session 丢失

我有两个 Node.js 服务器应用程序。第一个在 localhost:8081 上运行 Koa.JS,而第二个在 localhost:8080 上运行 Vue.JS。在两个服务器中,我使用的是 HTTP 而不是 HTTPS。

Koa.JS 服务器使用 Passport.JS 执行 oAuth2 登录流程,并提供端点以从 API 获取数据并将承载令牌传递给授权标头。

Vue.js 服务器负责客户端代码。它使用 axios 库调用 Koa 端点。

如果我打开浏览器,并针对 Koa 服务器测试登录流程,一切都很好并且工作正常。以下是步骤:

  1. 本地主机:8081/api/oauth/authenticate

    /li>
  1. 用户登录并授予访问权限
  2. 完成后,回调被称为 localhost:8081/api/oauth/callback

    /li>
  1. 会话与用户信息一起保存
  2. 用户打开新选项卡以转到 localhost:8081/api/user/profile

    /li>
  1. Koa 服务器调用另一个 API 来检索用户配置文件数据,Vue.js 应用程序得到一个正确的 JSON 响应

但是,如果我执行以下操作, ctx.session 会丢失:

  1. 导航到 localhost:8080(Vue.js 服务器)
  2. 通过重定向到 Koa 端点 localhost:8081/api/oauth/authenticate 来执行登录
  3. 登录并授予访问权限
  4. 在 Koa 上 /callback 重定向回 l​​ocalhost:8080/auth?isUserLoggedIn=true
  5. 在 Vue 应用程序中,使用 this.$route.query.isUserLoggedIn 检索查询参数,如果为 true,则调用 Koa 端点以获取用户配置文件数据 localhost:8081/api/user/profile

    /li>

最后一步返回 401 Unauthorized。

经过进一步调查,具有配置文件端点的 Koa 路由位于 appRoutes 中间件中。该中间件紧跟在 app.use(requireLogin) 中间件之后,该中间件检查会话是否经过身份验证 (ctx.isAuthenticated())。

这是发生 401 错误的地方,因为此时 ctx 会话为空。

我在处理某种时间问题吗?我尝试在我的 Koa server.js 文件中注释掉头盔中间件,但没有帮助。

请注意,如果我在同一个浏览器会话中打开一个新选项卡并转到 localhost:8081/api/user/profile 它工作正常。仅当从 Vue.js 调用此端点时,它才会由于 ctx.sesssion 为空而失败。

知道是什么将 ctx.session 重置为 null 吗?

0 投票
1 回答
1139 浏览

javascript - koa2:如何组织路由器控制器逻辑(中间件与非中间件)?

我有一个“控制器”中间件(连接到 koa-router)。

我想知道组织我的“内部”应用程序逻辑的最佳方法是什么(在我的控制器之外,连接到 koa-router 的中间件功能 router.post('/', createCtrl))。

  1. 第一种情况:"Everything is a middleware"。我的控制器只是组成了一组中间件函数,这些函数需要逐步从初始请求对象变为非常适合的响应对象。(我通过 读取并传递下一个中间件所需的参数ctx.state)。

    /li>
  2. 第二种情况:应用逻辑与 Koa 完全“解耦”。控制器将是一个调用非中间件函数的 koa 中间件,如下所示:

    /li>

将控制器视为中间件功能的组合是个好主意吗?或者这是对中间件功能的误用?

0 投票
1 回答
965 浏览

koa - 如何将默认返回状态设置为 200?

在处理不需要响应的请求时,我希望默认状态代码默认为 200(目前为 404)。
我有一堆插入数据库的 api 端点。目前我必须设置 ctx.status 或 ctx.body 返回 200(如果未设置,则返回 404)。有没有办法默认返回200?
谢谢

0 投票
4 回答
1674 浏览

node.js - 无论路由如何,如何提供相同的静态文件?

我有一个反应应用程序。使用 webpack 我为生产而构建。现在我尝试设置一个小 koa 服务器来提供 webpack 生成的静态文件用于生产。

所以我做了这个

文件所在dist/的目录(index.html、bundle 等)在哪里。这很好用,但仅适用于路由 '/' (localhost:3001/) 在我的应用程序中,我使用反应路由器,所以我需要通过示例转到 /login (localhost:3001/login)。但是当我尝试时,我得到“未找到”。使用 devServer(通过 webpack),这条路线运行良好。我只需要始终为 /dist 服务,无论路线如何。如何做到这一点?

0 投票
1 回答
1101 浏览

node.js - Koa.js 总是找不到 404

我在 Koa 中开发并使用 Firebase 进行消息传递,因为有一个实时数据库。当我想从 firebase 获取消息时,我得到了 Not found,但console.log()它显示了我。

这是我的功能getConversation(消息)

然后我像这样在另一个控制器中调用它

最后,我在路由中调用它。

我总是找不到身体。有人知道我该如何解决吗?

0 投票
1 回答
1292 浏览

node.js - Node Koa 如何将参数传递给中间件?

将我的 Express 应用程序转换为 Koa...

我正在谷歌搜索,我正在谷歌搜索,我找不到如何将额外的参数传递给 Koa 中间件。例如...

我需要将一些变量 bodyAttribs(字符串数组)名称发送到 bodySchemaTest 中间件,我不知道如何在 Koa 中执行此操作。

我现在正在尝试 Koa。请分享您的专业知识:-)

0 投票
1 回答
2314 浏览

node.js - 获取 Koa 实际路线

我是koa的新手。我需要在 koa 请求中获得实际路线。

示例 1:如果我到达一条路线 /user并获得 ctx 原始 url /user/

示例 2:如果我打了一条路线user/:id,我得到了 ctx 原始 url /user/1

我试着得到这样的路径

我想获得user/:id每个请求中的实际路由路径。

在快速路线中获得这样的实际路径

输出:

0 投票
1 回答
849 浏览

server-sent-events - 使用 Koa 处理服务器发送的事件

在用 Express 实现 SSE 之后,我想对 Koa 做同样的事情,如下所示:

对于我的客户,在 React 组件的构造函数中:

但由于某种原因,我在客户端收到以下错误消息:

Firefox 无法在http://localhost:8080/stream建立与服务器的连接。

即使我的客户的请求/stream确实通过了(但没有回复)。

什么可能导致 SSE 连接出现此问题?

我有一个 Koa 服务器在给定端口上侦听,这是一条使用正确的标头数据捕获初始 GET 请求的路由,但它失败了。

0 投票
2 回答
2171 浏览

koa - 如何在 Koa 中间件中传递参数?

所以我在 Koa 中有这个功能,它基本上检查用户是否可以访问特定的路线。

我想将它用作中间件:

但后来我收到一条错误消息:

中间件必须是函数而不是对象

仅当我尝试将参数传递给它时才会发生这种情况。

我在这里做错了什么?