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