作为一个学习练习,我试图在node.js中构建一个路由器.这意味着可以重复使用.我的路由器的文件结构如下所示: / myProject app.js /路线 index.js about.js / modules /路由器 router.js 在app.js中,我创建
> / myProject
> app.js
> /路线
> index.js
> about.js
> / modules
> /路由器
> router.js
在app.js中,我创建了一个路由器对象,并将路径传递给我的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.js和about.js文件如下所示:
exports.index = function(req, res){ // Some code here }
我执行’node app.js’,然后将路由器对象’./routes’作为路径路径传递.加载文件名很好,但我的控制台输出是:
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(){...}
但这没有效果.根据我对节点和要求的理解,这应该是有效的.我是一个新手,所以请原谅我,如果这里的问题是愚蠢的.
您应该使用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 /这样的文件模块/路由器/路由/ index.js.