Fastify 插件 fastify-autoload 报错 plugin must be a function

Fastify plugin fastify-autoload error plugin must be a function

我已经使用命令 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

正在检查您的存储库,错误是 dir 值。必须指向文件所在目录,暂不支持递归加载

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

通过此更改,npm start 将起作用。

另一种选择是在需要跳过的文件中使用 module.exports.autoload = false,但您的正则表达式没问题。

如果你来到这里并且你使用打字稿,也许尝试删除 dist 目录和 re-run tsc,你可能有一个错误的路线一直存在