我正在尝试将自己的users.js模块包含到我的路由器文件中。它不断抛出错误:
找不到模块' ./ router / users.js'
我的目录结构如下:
nodejs (我的驱动器上的主文件夹)
- expressserver.js (我的服务器文件)
- package.json
- router (包含main.js路由器和users.js用户详细信息文件的文件夹)
----- main.js
----- userss.js
----- orderss.js
此处我的用户模块与路由器(main.js)位于同一文件夹中
我的路由器代码是:
var url = require('url');
var users = require('./router/users.js');
module.exports = function (app) {
app.get('/', function (req, res) {
res.render('index.html');
console.log("Home page displayed");
});
app.get('/login', function (req, res) {
res.render('login.html');
console.log("Log in page displayed");
});
app.get('/api/orders/:id', function (req, res) {
console.log(req.params.id);
res.json(ORDER.orders[req.params.id]);
});
app.get('/api/orders/', function (req, res) {
console.log(ORDER);
res.json(ORDER);
});
app.get('/api/users/:id', function (req, res) {
console.log(req.params.id);
res.json(USERS.users[req.params.id]);
});
app.get('/api/users/', function (req, res) {
console.log(USERS);
res.json(USERS);
});
我的users.js代码:
module.exports = function () {
// Create User prototype and objects
var USERS = { users: [] };
function User(type, useremail, password) {
this.type = type;
this.useremail = useremail;
this.password = password;
}
var Bob = new User("rep", "bob@bob.com", "qwerty");
USERS.users.push(Bob);
var Helen = new User("rep", "helen@helen.com", "test");
USERS.users.push(Helen);
var Dominic = new User("customer", "dom@dom.com", "1234");
USERS.users.push(Dominic);
var James = new User("grower", "james@james.com", "pass1");
USERS.users.push(James);
};
我对此非常陌生,但已经在模块上阅读了很多,但仍然无法弄明白。关于我哪里出错的任何建议?或者我需要做些什么来纠正这个问题?
注意:以前我在路由器和我的服务器中使用module.exports = function (app) {
将路由器包含到服务器文件中做了同样的事情:require('./router/main')(app);
答案 0 :(得分:9)
由于您已指定模块的相对路径,因此该路径相对于执行require
的源文件的目录。在您的情况下,它已经相对于“路由器”而已。目录。这将有效:
var users = require('./users.js');
或者甚至只是以下内容,因为扩展名会自动解决:
var users = require('./users');
答案 1 :(得分:3)
require()
的路径默认设置为node_modules
文件夹。
这就是为什么你可以在你的情况下要求所有模块,例如var url = require('url');
。
如果在当前项目中找不到该模块,则将全局搜索该模块(如果在机器上设置了路径变量)。
现在,当您定义自定义模块时,您可以将它们保存在文件夹node_modules
中,或者您可以提供相对于您需要该模块的当前JS文件的路径。
例如,
var users = require('./users');
如果当前工作目录中有另一个文件夹,请说modules
,
然后你可以这样做:
路由器
----- main.js
----- orderss.js
----------------模块(文件夹)
----------------------- users.js
var users = require('./modules/users');
因此,require的路径始终从node_modules
文件夹