我已经使用命令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,但是您的正则表达式可以。

08-19 19:35