Fastify插件fastify-autoload错误插件必须是一个函数

问题描述 投票:0回答:4

我已经使用命令

fastify-cli generate
使用 fastify-cli 库设置了 fastify 框架。它具有开箱即用的 fastify-autoload 插件。

但是,当我添加自己的服务时,除了 model.js 和 schema.js 文件之外,它会抛出错误。

...
fastify.register(AutoLoad, {
    dir: path.join(__dirname, 'services'),
    options: Object.assign({}, opts),
    ignorePattern: /.*(model|schema)\.js/
})
...

错误信息:

assert.js:788
    throw newErr;
    ^

AssertionError [ERR_ASSERTION]: ifError got unwanted exception: plugin must be a function
    at wrap (D:\project\kuisioner\backend\node_modules\fastify-cli\start.js:124:5)
    ...
      actual: Error: plugin must be a function
    ...
    error Command failed with exit code 1.
    ...

但是我手动注册就可以顺利运行了

...
fastify.register(require('./services/quiz/get'))
fastify.register(require('./services/quiz/post'))
...

我的文件结构:

- src
  - plugins
    - db.js
  - services
  | - quiz
  |   - get.js
  |   - model.js
  |   - post.js
  |   - schema.js
  - app.js

我使用 fastify-cli

fastify start -l info src/app.js
来运行我的代码

这是我的仓库https://github.com/nnfans/kuisionerid_backend

javascript node.js fastify
4个回答
6
投票

检查您的存储库,错误是

dir
值。您必须指向文件的目录,尚不支持递归加载

  fastify.register(AutoLoad, {
    dir: path.join(__dirname, 'services/quiz'), 
    options: Object.assign({}, opts),
    ignorePattern: /.*(model|schema)\.js/
  })

通过此更改,

npm start
将起作用。

另一种选择是在需要跳过的文件中使用

module.exports.autoload = false
,但你的正则表达式没问题。


5
投票

如果你到了这里并且使用 typescript,也许尝试删除 dist 目录并重新运行 tsc,你可能会有一条错误的路线持续存在


1
投票

可能如果您不小心创建了一个空路由文件,则会发生此问题,并且它会持续存在于 dist 上(大多数情况下您使用的是 TypeScript )此空路由文件不会返回功能输出。正如 yonadav bar ilan 所说,你必须删除 dist 并尝试重新运行它。


0
投票

根据docs,如果您将节点与 tsx 一起使用,您应该更改命令:

node --import=tsx server.ts

对于

tsx server.ts

© www.soinside.com 2019 - 2024. All rights reserved.