如何向 module.exports 路由中的长格式 return 请求添加参数?

How do I add parameters to long-form return requests in module.exports routes?

我正在为一个 API 连接区域编码,它主要是 graphql 但需要为某些事情建立一些 REST 连接,并且等效于以下代码:

foo.js

module.exports = {
  routes: () => {
    return [
      {
        method: 'GET',
        path: '/existing_endpoint',
        handler: module.exports.existing_endpoint
      }, 
      {
        method: 'POST',
        path: '/new_endpoint',
        handler: module.exports.new_endpoint // <--- this not passing variables
      }
    ]
  }, 
    existing_endpoint: async () => {
       /* endpoint that isn't the concern of this */ 
    }, 
    new_endpoint: async (req, res) => {
        console.log({req, res})
        return 1
    }
}

现有的 GET 端点工作正常,但我的 POST 端点总是在 {} 的控制台出错,其中 {req, res} 应该由路由器传入,我怀疑是因为POST 没有收到。我试过将路由中的 POST 声明更改为 module.exports.new_endpoint(req, res),但它告诉我未找到变量,而导入 server.js 确实有文件(它看起来更像这样......),并用 server.js 做类似的事情,也得到类似的结果,暗示这也可能是错误的。另外,我们有一个非常严格的 eslint 设置,所以我不能真正改变调用的格式。

我在网上看到的每个使用这些库的例子都是一些简短的形式,或者在路由调用中包含函数,而不是像这样的长形式。我该如何做这种格式的 POST?

/* hapi, environment variables, apollog server, log engine, etc. */
/* preceeding library inclusions */ 
const foo = require('./routes/foo')
const other_route = require('./routes/other_route')

const startServer = async () => {
    const server = Hapi.server({port, host})

    server.route(other_route.routes())
    server.route(foo.routes())
}

这是节点 v16 中 Hapi 的错误。 I just opened an issue.

您当前的解决方案是:

  • 升级到 Hapi v20
  • 使用n 或其他方法将此项目降级到节点 v14.16。我可以确认 POST 请求不会在此版本中挂起。