Express.js引入'./middlewares'模块失败问题求助
Express.js拆分中间件报错:Cannot find module './middlewares'
问题概述
原本单文件index.js可正常在3000端口启动服务器,拆分CORS和body-parser到独立文件后,出现错误:Error: Cannot find module './middlewares'。
项目文件夹结构:
- project_folder
- index.js
- middlewares
- cors.js
- bodyParser.js
- configs
- server.js
- database.js
错误原因及解决步骤
1. 解决模块找不到的问题
Node.js中require('./middlewares')会默认查找该文件夹下的index.js文件,而你的middlewares文件夹中没有这个文件,因此触发模块找不到的错误。有两种修复方案:
方案1:在middlewares文件夹添加index.js
创建middlewares/index.js,统一导出两个中间件:
const cors = require('./cors'); const bodyParser = require('./bodyParser'); module.exports = { cors, bodyParser };
方案2:直接引入具体的中间件文件
修改index.js中的引入代码:
const cors = require('./middlewares/cors'); const bodyParser = require('./middlewares/bodyParser');
2. 修正中间件调用方式
你的cors.js和bodyParser.js导出的是接收app参数的函数,不是返回中间件的函数,因此不能用app.use(middlewares.cors())的写法,需要直接调用函数并传入app:
如果用方案1,index.js修改为:
const express = require('express'); const app = express(); const middlewares = require('./middlewares'); const configs = { database: require('./configs/database'), server: require('./configs/server') }; // 调用中间件函数并传入app middlewares.cors(app); middlewares.bodyParser(app); configs.database.setupDatabase(); configs.server.startServer(app);
如果用方案2,index.js修改为:
const express = require('express'); const app = express(); const cors = require('./middlewares/cors'); const bodyParser = require('./middlewares/bodyParser'); const configs = { database: require('./configs/database'), server: require('./configs/server') }; cors(app); bodyParser(app); configs.database.setupDatabase(); configs.server.startServer(app);
3. 修复configs未引入的问题
原index.js中直接使用configs但未引入,需补充上述代码中的configs引入逻辑。
可选优化:调整中间件写法为返回中间件函数
如果希望保持app.use()的调用方式,可以修改cors.js和bodyParser.js,让它们返回中间件函数:
修改cors.js:
module.exports = () => { return (req, res, next) => { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization'); res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); next(); }; };
修改bodyParser.js:
const express = require('express'); module.exports = () => { return [ express.json(), express.urlencoded({ extended: true }) ]; };
此时index.js可保持原调用写法(需先解决middlewares模块引入问题):
app.use(middlewares.cors()); app.use(middlewares.bodyParser());
内容的提问来源于stack exchange,提问作者funderjimed ieinc
相关产品推荐
相关产品推荐

