NodeJs:modules.export:找不到我自己的自定义模块

时间:2015-02-20 14:30:59

标签: javascript node.js

我正在尝试将自己的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);

2 个答案:

答案 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文件夹

开始