Fastify Error: ERR_AVVIO_PLUGIN_TIMEOUT: Plugin did not start in time
Fastify Error: ERR_AVVIO_PLUGIN_TIMEOUT: Plugin did not start in time
我正在学习 Fastify 教程,到目前为止一切顺利(连接到数据库,路由工作等) 但是当尝试添加 notesDAL
我收到以下错误:
Error: ERR_AVVIO_PLUGIN_TIMEOUT: plugin did not start in time: /routes/notes/notesDAL.js. You may have forgotten to call 'done' function or to resolve a Promise
代码与教程完全相同,所以我认为它可能已经过时但我迷路了。我尝试了几种不同的方法,但似乎总是遇到错误。如有任何帮助,我们将不胜感激。
notes.js
"use strict";
const NotesDAL = require("./notesDAL");
module.exports = async function (fastify, opts) {
const notesDAL = NotesDAL(fastify.db);
fastify.route({
method: "POST",
url: "/",
handler: async (request, reply) => {
const { title, body } = request.body;
const newNote = await notesDAL.createNote(title, body);
return newNote;
},
});
};
notesDAL.js
const NotesDAL = (db) => {
const createNote = async (title, body) => {
const { id } = await db.one(
"INSERT INTO notes (title, body) VALUES (, ) RETURNING id",
[title, body]
);
return { id, title, body };
};
return { createNote };
};
module.exports = NotesDAL;
如果重要,文件夹结构为:
/app.js
/plugins/db.js
/routes/notes/notes.js
/routes/notes/notesDAL.js
编辑:
我已经让它工作了,但是我确信这不是正确的做事方式,它看起来很奇怪。
notesDAL.js
const NotesDAL = (db) => {}
更新为:
const NotesDAL = async (db) => {}
notes.js
const newNote = await notesDAL.createNote(title, body)
更新为:
const newNote = await (await.notesDAL).createNote(title, body)
正如我提到的,这看起来很糟糕,但似乎有效。我仍然想知道更好的方法。
谢谢。
事实证明,通过使用 fastify-cli 创建项目,我使用的是 fastify-autoload,这阻止了它的工作。
AutoLoad 可以通过在注册 AutoLoad 时将以下内容添加到 app.js
来忽略 DAL 文件:
ignorePattern: /.*(DAL).js/,
然后就成功了。或者,我可以将 notesDAL.js
移动到一个名为 services
的文件夹中,这样就可以了。因此文件夹结构为:
/app.js
/plugins/db.js
/routes/notes/notes.js
/services/notesDAL.js
我正在学习 Fastify 教程,到目前为止一切顺利(连接到数据库,路由工作等) 但是当尝试添加 notesDAL
我收到以下错误:
Error: ERR_AVVIO_PLUGIN_TIMEOUT: plugin did not start in time: /routes/notes/notesDAL.js. You may have forgotten to call 'done' function or to resolve a Promise
代码与教程完全相同,所以我认为它可能已经过时但我迷路了。我尝试了几种不同的方法,但似乎总是遇到错误。如有任何帮助,我们将不胜感激。
notes.js
"use strict";
const NotesDAL = require("./notesDAL");
module.exports = async function (fastify, opts) {
const notesDAL = NotesDAL(fastify.db);
fastify.route({
method: "POST",
url: "/",
handler: async (request, reply) => {
const { title, body } = request.body;
const newNote = await notesDAL.createNote(title, body);
return newNote;
},
});
};
notesDAL.js
const NotesDAL = (db) => {
const createNote = async (title, body) => {
const { id } = await db.one(
"INSERT INTO notes (title, body) VALUES (, ) RETURNING id",
[title, body]
);
return { id, title, body };
};
return { createNote };
};
module.exports = NotesDAL;
如果重要,文件夹结构为:
/app.js
/plugins/db.js
/routes/notes/notes.js
/routes/notes/notesDAL.js
编辑:
我已经让它工作了,但是我确信这不是正确的做事方式,它看起来很奇怪。
notesDAL.js
const NotesDAL = (db) => {}
更新为:
const NotesDAL = async (db) => {}
notes.js
const newNote = await notesDAL.createNote(title, body)
更新为:
const newNote = await (await.notesDAL).createNote(title, body)
正如我提到的,这看起来很糟糕,但似乎有效。我仍然想知道更好的方法。
谢谢。
事实证明,通过使用 fastify-cli 创建项目,我使用的是 fastify-autoload,这阻止了它的工作。
AutoLoad 可以通过在注册 AutoLoad 时将以下内容添加到 app.js
来忽略 DAL 文件:
ignorePattern: /.*(DAL).js/,
然后就成功了。或者,我可以将 notesDAL.js
移动到一个名为 services
的文件夹中,这样就可以了。因此文件夹结构为:
/app.js
/plugins/db.js
/routes/notes/notes.js
/services/notesDAL.js