javascript 在 Nodejs 中找不到模块 - module.js

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/33394085/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-28 16:26:24  来源:igfitidea点击:

Cannot find module in Nodejs - module.js

javascriptnode.jsnpm

提问by hakuna

I am getting the following error when running the node server:

运行节点服务器时出现以下错误:

$ node server.js
module.js:339
    throw err;
    ^

Error: Cannot find module './server/routes'
    at Function.Module._resolveFilename (module.js:337:15)
    at Function.Module._load (module.js:287:25)
    at Module.require (module.js:366:17)
    at require (module.js:385:17)
    at Object.<anonymous> (C:\Users\attas\documents\github\angular-express-auth\server.js:12:10)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:442:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Function.Module.runMain (module.js:467:10)

Below is my project structure:

下面是我的项目结构:

Project structure

项目结构

server.js:

服务器.js:

var express = require('express'),
jwt = require('express-jwt'),
bodyParser = require('body-parser'),
morgan = require('morgan'),
methodOverride = require('method-override'),
errorHandler = require('express-error-handler'),
tokenManager = require('./server/config/token_manager'),
secret = require('./server/config/secret'),
http = require('http'),
path = require('path');

var app = module.exports = express();

app.set('port', process.env.PORT || 3000);    
app.use(morgan('dev'));
app.use(bodyParser.json());
app.use(methodOverride());
app.use(express.static(path.join(__dirname, 'app')));

var routes = require('./server/routes');
routes.users = require('./server/routes/users.js');
var env = process.env.NODE_ENV || 'development';

// development only
if (env === 'development') {
  app.use(errorHandler());
}

// production only
if (env === 'production') {
  // TODO
}

app.all('*', function(req, res, next) {
  res.set('Access-Control-Allow-Origin', 'http://localhost');
  res.set('Access-Control-Allow-Credentials', true);
  res.set('Access-Control-Allow-Methods', 'GET, POST, DELETE, PUT');
  res.set('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Authorization');
  if ('OPTIONS' == req.method) return res.send(200);
  next();
});

/*
Login
*/
app.post('/login', routes.users.login);
app.post('/user/register', routes.users.register);
app.get('/me', routes.users.me);

/*
Logout
*/
app.get('/logout', jwt({secret: secret.secretToken}), routes.users.logout);

process.on('uncaughtException', function(err) {
    console.log(err);
});

/**
* Start Server
*/
http.createServer(app).listen(app.get('port'), function () {
  console.log('Express server listening on port ' + app.get('port'));
});

Not getting any error for

没有得到任何错误

tokenManager = require('./server/config/token_manager') and secret = require('./server/config/secret')

tokenManager = require('./server/config/token_manager') 和 secret = require('./server/config/secret')

wondering why it cannot load only ./server/routes ?

想知道为什么它不能只加载 ./server/routes ?

回答by Furkan Ba?aran

When you define a module like this:

当你像这样定义一个模块时:

var routes = require('./server/routes');

If index.jsfile is exist in ./server/routesdirectory, It's meaning you call ./server/routes/index.jsfile.

如果index.js目录中存在文件,则./server/routes表示您调用./server/routes/index.js文件。

You can't call like this: ./server/routes/index.js/users.js.

你不能这样调用: ./server/routes/index.js/users.js.

You should update your users router variable like below:

您应该更新您的用户路由器变量,如下所示:

var routes = require('./server/routes');
var users  = require('./server/routes/users');

And update usersvariable's other usages in server.js file so your app will work correctly.

并在 server.js 文件中更新users变量的其他用法,以便您的应用程序正常运行。

回答by Simone Sanfratello

var routes = require('./server/routes');

server/routes is a directory, not a file, you mean

server/routes 是一个目录,而不是一个文件,你的意思是

var routes = require('./server/routes/index');