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

使用express-validator时遇模块导出命名不匹配的SyntaxError求助

问题:ES模块导入导出不匹配导致的SyntaxError

代码场景

验证文件(author.validator.js)代码:

import { check } from "express-validator";

exports.validateAuthor = [
    check('name', 'name is required').not().isEmpty()
];

路由文件代码:

import { Router } from 'express';
import { getItems, getItem, createItem, updateItem, deleteItem } from '../controller/author.controller.js';
import { validateAuthor } from '../middleware/author.validator.js';

const router = Router();

router.route('/')
    .get((req,res) => getItems(req,res))
    .post(validateAuthor, (req,res) => createItem(req,res))
    .patch(validateAuthor, (req,res) => updateItem(req,res))
    .delete((req,res) => deleteItem(req,res));

router.route(`/:id`)
    .get((req,res) => getItem(req,res));

export default router;

报错信息

SyntaxError: The requested module '../middleware/author.validator.js' does not provide an export named 'validateAuthor'

错误原因

你的项目使用ES模块语法(通过import/export可判断,且项目大概率在package.json中配置了"type": "module"),但验证文件用的是CommonJS的导出方式(exports.validateAuthor),两种模块规范不兼容,导致ES模块的命名导入无法识别CommonJS的导出项。

tutsmake的示例可能基于CommonJS规范(使用require/module.exports),和你的项目模块规范不一致。

解决方案

统一使用ES模块语法即可,有两种修改方式:

方式1:使用ES模块命名导出

修改验证文件的导出代码:

import { check } from "express-validator";

// 改用ES模块命名导出
export const validateAuthor = [
    check('name', 'name is required').not().isEmpty()
];

路由文件的导入代码无需修改,保持原有的命名导入即可。

方式2:使用ES模块默认导出

修改验证文件:

import { check } from "express-validator";

const validateAuthor = [
    check('name', 'name is required').not().isEmpty()
];

// 改用默认导出
export default validateAuthor;

同时修改路由文件的导入语句:

// 改为默认导入
import validateAuthor from '../middleware/author.validator.js';

内容的提问来源于stack exchange,提问作者Jhon Estrada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:47:27