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

Posted

技术标签:

【中文标题】Node.js AWS 部署错误:找不到模块【英文标题】:Node.js AWS deployment Error: Cannot find module 【发布时间】:2017-11-05 09:28:27 【问题描述】:

我正在尝试将一个简单的 Node?JS 应用程序上传到弹性 beanstalk。所有依赖项都列在我的 package.json 文件中,并且应用程序正在通过 nginx 代理监听 8081。

从节点日志文件中抛出以下错误。模块在服务器上的放置方式是否不同?

服务器运行在http://127.0.0.1:8081/module.js:471 抛出错误; './routes/FtseData' 在 Function.Module._resolveFilename (module.js:469:15) 在 Function.Module._load (module.js:417:25) 在 Module.require (module.js:497:17) 在需要(内部/module.js:20:19) 在对象。 (/var/app/current/routes.js:7:20) 在 Module._compile (module.js:570:32) 在 Object.Module._extensions..js (module.js:579:10) 在 Module.load (module.js:487:32) 在 tryModuleLoad (module.js:446:12) 在 Function.Module._load (module.js:438:3) module.js:471 抛出错误; ^

错误:找不到模块“./routes/FtseData” 在 Function.Module._resolveFilename (module.js:469:15) 在 Function.Module._load (module.js:417:25) 在 Module.require (module.js:497:17) 在需要(内部/module.js:20:19) 在对象。 (/var/app/current/routes.js:7:20) 在 Module._compile (module.js:570:32) 在 Object.Module._extensions..js (module.js:579:10) 在 Module.load (module.js:487:32) 在 tryModuleLoad (module.js:446:12) 在 Function.Module._load (module.js:438:3) module.js:471 抛出错误; ^

这是我的 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') routes.js 位于 server.js 的根文件夹中。 FtseData.js 位于 /routes 文件夹中。如果我的路径错误,它不会在我的本地机器上工作,但它确实 我不得不将文件扩展名放在 require 语句上。要求('./routes/FtseData');需要('./routes/FtseData.js'); 【参考方案1】:

我的文件是 /routes/FtseData.js

这导致了错误

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

匹配文件所需的大小写

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

【讨论】:

但是 nodejs 文档建议它会自动尝试添加 .js , .json 最后是 .node here 我又测试过了。你是正确的。问题似乎是文件名中的大小写。谢谢 感谢您回来回答您自己的问题。

以上是关于Node.js AWS 部署错误:找不到模块的主要内容,如果未能解决你的问题,请参考以下文章

aws + serverless + webpack => 在 prod 中找不到模块 xxx

Node.js 错误:找不到模块快递

node.js,错误:找不到模块'express'

node.js 错误:找不到模块“lodash.assign”

如何使用 Node.js 解决“找不到模块”错误?

node.js/typescript 找不到本地模块