You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fastify报错:Plugin必须为函数或Promise,接收到object类型

问题解决:AvvioError [AVV_ERR_PLUGIN_NOT_VALID]

你遇到的这个错误本质是Fastify的register方法仅接受函数/返回Promise的函数作为插件,但你传入的是一个普通对象(router),不符合插件的格式要求。以下是两种直接有效的解决方式:


方式一:将路由对象转为Fastify插件函数

修改/src/routes/index.js,把导出的对象改成标准的Fastify插件函数:

import { healthCheck } from '../controllers/healthCheckController.js';

// 改为插件函数,参数为fastify实例和配置选项
export default async function routes(fastify, options) {
  // 注册health-check路由
  fastify.route({
    method: 'GET',
    url: '/health-check',
    handler: async (request, reply) => {
      return healthCheck(request, reply);
    }
  });

  // 其他路由可在此继续用fastify.route添加
}

修改后,入口文件的fastify.register(router, { prefix: '/api/v1' })就能正常工作,因为router现在是符合要求的插件函数。


方式二:直接遍历路由对象注册(适合简单场景)

如果不想修改路由文件结构,可在入口文件中手动遍历路由对象,用fastify.route逐个注册:

import Fastify from 'fastify';
const fastify = Fastify({
  logger: true,
});
import routes from './src/routes/index.js';

// 遍历路由对象,拼接前缀后注册
for (const [url, routeConfig] of Object.entries(routes)) {
  fastify.route({
    url: `/api/v1${url}`,
    ...routeConfig
  });
}

try {
  await fastify.listen({ port: 4000 });
} catch (err) {
  fastify.log.error(err);
  process.exit(1);
}

这种方式无需改动路由文件,直接在入口完成路由注册,适合路由数量较少的场景。

内容的提问来源于stack exchange,提问作者Not A Robot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 20:30:04