快递:找不到模块?

时间:2017-07-26 01:22:40

标签: node.js express

我正在使用Express进行一些路由,我想在signup.js的静态javascript文件中调用一个函数,但是我收到错误说

Error: Cannot find module './js/list.js' 

我的目录结构如下:

app.js
-routes/signup.js
-public/js/list.js

在我的app.js文件中,我有这一行:

app.use(express.static(path.join(__dirname, 'public')));

在我的signup.js中,我有:

var listModel = require('./js/list.js');

我的list.js文件包含:

module.exports.list = function (userName, category) { 
  return ({
    "owner" : userNameName,
    "category" : category,
    "completed" : [],
    "planned" : [],
    "current" : [],
    "dropped" : [],
    "onHold"  : []
  });
}

为了将列表功能导入我的注册文件,还有什么我遗漏的吗?谢谢!

3 个答案:

答案 0 :(得分:0)

由于它们具有不同的signup并且列表具有不同的父目录,因此NodeJS require函数不会将它们视为兄弟姐妹。因此你需要写

var listModel = require('../public/js/list.js');

routes/signup.js

如果你有一个文件public/test.js,你确实可以使用

var listModel = require('./js/list.js');

要求从中获取依赖。

答案 1 :(得分:0)

require模块路径应为:

var listModel = require('../public/js/list'); // it is fine to have the file extension

答案 2 :(得分:0)

在您的情况下,signup.jslist.js位于不同的文件夹中,您必须指定它的完整路径。

var listModel = require('../public/js/list.js');

app.use(express.static(path.join(__dirname, 'public')));表示当您转到localhost(或托管应用程序的任何路径)时,您将可以访问该文件夹。这意味着当您转到localhost:3000/js/list.js时,您将可以访问该文件夹。