Node.js AWS 部署错误: 找不到模块

5
我正在尝试将一个简单的Node?JS应用程序上传到弹性豆荚上。所有依赖项都在我的package.json文件中列出,该应用程序通过nginx代理监听8081端口。
从节点日志文件中抛出以下错误。模块是否在服务器上放置不同位置?

Server running at http://127.0.0.1:8081/ module.js:471 throw err; './routes/FtseData' at Function.Module._resolveFilename (module.js:469:15) at Function.Module._load (module.js:417:25) at Module.require (module.js:497:17) at require (internal/module.js:20:19) at Object. (/var/app/current/routes.js:7:20) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3) module.js:471 throw err; ^

Error: Cannot find module './routes/FtseData' at Function.Module._resolveFilename (module.js:469:15) at Function.Module._load (module.js:417:25) at Module.require (module.js:497:17) at require (internal/module.js:20:19) at Object. (/var/app/current/routes.js:7:20) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3) module.js:471 throw err; ^

这是我的server.js文件。
var express = require('express');
var basicAuth = require('express-basic-auth')
var bodyParser = require('body-parser')
var cors = require('cors');
var app = express();

app.use(cors()); 

app.get('/', function (req, res) {
//    res.send('Hello World');
    res.sendFile(__dirname + '/views/index.html');
})

var routes = require('./routes');
app.use('/api', routes);


var server = app.listen(8081, function () {
   var host = server.address().address
   var port = server.address().port

   console.log("App listening at http://%s:%s", host, port)
})

routes.js

var express = require('express');
var basicAuth = require('express-basic-auth')
var app = express();
var router = express.Router();

//var profCtrl = require('./routes/profileController');
var ftseDataCtrl = require('./routes/FtseData');
var ftseDivCtrl = require('./routes/FtseDiv');

//routes not needing auth
router.route('/FtseDivGet').get(ftseDivCtrl.get);
//routes needing auth
 router.use(basicAuth({
     users: { 'admin': 'supersecret' }
 }))
//router.route('/FtseDataScrape').get(ftseDataCtrl.scrape);
router.route('/FtseDivScrape').get(ftseDivCtrl.scrape);
//http://localhost:8081/api/profile

module.exports = router;

package.json

{
  "name": "StockTracker",
  "version": "1.0.0",
  "description": "Stock-Tracker",
  "dependencies": {
    "express": "*",
    "express-basic-auth": "*",
    "request": "*",
    "cheerio": "*",
    "body-parser": "*",
    "cheerio-tableparser": "*",
    "cors": "*",
    "csv-load-sync": "*"        
  },
  "scripts": {
    "start": "node server.js"
  }
}

如果 FTseDataroutes 文件夹中,且 routes.js 也在同一文件夹中,则使用 require('./FtseData') 而不是 require('./routes/FtseData') - Santosh
routes.js位于根目录下,与server.js在同一级别。FtseData.js位于/routes文件夹中。如果路径错误,本地机器上将无法正常工作,但实际上它可以正常运行。 - user2202098
我必须在 require 语句中加上文件扩展名。将 require('./routes/FtseData'); 更改为 require('./routes/FtseData.js');。 - user2202098
1个回答

5

我的文件路径为/routes/FtseData.js

这导致了错误

var ftseDataCtrl = require('./routes/FTSEData');

需要将案例与文件匹配

var ftseDataCtrl = require('./routes/FtseData');

但是Node.js文档建议它会自动尝试添加“.js”、“.json”和最后“.node” 在这里 - Santosh
1
我已经再次测试了。你是正确的。问题似乎出现在文件名的大小写上。谢谢。 - user2202098
1
感谢您回来回答自己的问题。 - aero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接