gpt4 book ai didi

Node.js:require() 和 MODULE_NOT_FOUND

转载 作者:搜寻专家 更新时间:2023-10-31 23:33:18 26 4
gpt4 key购买 nike

作为一项学习练习,我正在尝试在 Node.js 中构建一个路由器,这意味着可重用。

我的路由器的文件结构如下所示:

/myProject
app.js
/routes
index.js
about.js
/modules
/router
router.js

app.js 中,我创建了一个 router 对象,并将它传递到我的 routes 文件夹的路径:

var Router = require('./modules/router/router');
var router = new Router('./routes');

在路由器对象的构造函数中,我将文件名从传递给对象的路径加载到数组中,并尝试将它们作为模块添加到对象中:

var fs = require('fs');
var routes = {}
var routesFolder;

function Router(routesPath){
this.routesFolder = routesPath;
fs.readdir(this.routesFolder, this.loadRoutes);
}

Router.prototype.loadRoutes(err, files){
for (var i=0;i<files.length;i++){
var c = files[i].split('.');
if(c[1] === 'js'){
try{
var t = require(routesFolder + '/' + c[0]);
routes['/' + c[0]] = t[c[0]];
}
catch(err){
console.log('Error parsing file: ' + files[i];
console.log(err);
}
}
}
}

我的 index.jsabout.js 文件如下所示:

exports.index = function(req, res){
// Some code here
}

我运行 node app.js,并将路由器对象 ./routes 作为 route 的路径传递。文件名加载得很好,但我的控制台输出是:

Error parsing: index.js
{ [Error: Cannot find module './routes/index'] code: 'MODULE_NOT_FOUND' }
Error parsing: about.js
{ [Error: Cannot find module './routes/about'] code: 'MODULE_NOT_FOUND' }

我尝试以几种不同的方式更改我的路由文件:

module.exports = function(){...}
module.exports.index = function(){...}

但这没有任何效果。根据我对 noderequire 的理解,这应该可行。我是一个新手,所以如果这里的问题很愚蠢,请原谅我。

最佳答案

您应该使用绝对路径指向您的 routes文件夹:

var path = require("path");
var Router = require('./modules/router/router');
var router = new Router(path.join(__dirname,'routes'));

我认为正在发生的事情是 fs.readdir正在使用 process.cwd这是app.js的目录但是require()解析相对路径时总是使用当前脚本的位置,因此正在寻找类似 /myProject/modules/router/routes/index.js 的文件.

关于Node.js:require() 和 MODULE_NOT_FOUND,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19272880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com