我已经使用命令
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
来运行我的代码
检查您的存储库,错误是
dir
值。您必须指向文件的目录,尚不支持递归加载
fastify.register(AutoLoad, {
dir: path.join(__dirname, 'services/quiz'),
options: Object.assign({}, opts),
ignorePattern: /.*(model|schema)\.js/
})
通过此更改,
npm start
将起作用。
另一种选择是在需要跳过的文件中使用
module.exports.autoload = false
,但你的正则表达式没问题。
如果你到了这里并且使用 typescript,也许尝试删除 dist 目录并重新运行 tsc,你可能会有一条错误的路线持续存在
可能如果您不小心创建了一个空路由文件,则会发生此问题,并且它会持续存在于 dist 上(大多数情况下您使用的是 TypeScript )此空路由文件不会返回功能输出。正如 yonadav bar ilan 所说,你必须删除 dist 并尝试重新运行它。