首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js应用程序在本地工作,但heroku说缺少模块

Node.js应用程序在本地工作,但heroku说缺少模块
EN

Stack Overflow用户
提问于 2014-06-02 04:58:20
回答 3查看 8.2K关注 0票数 20

我使用Node.JS和Socket.IO制作了一个简单的聊天应用程序,在本地一切正常,但是当我把它推到heroku时,它会给我一个应用程序错误,当我检查日志时,这就是错误:

代码语言:javascript
复制
Error: Cannot find module 'indexof'
    at Function.Module._resolveFilename <module.js:338:15>
    at Function.Module._load <module.js:280:25>
    at Module.require <module.js:364:17>
    at require <module.js:380:17>
    at Object.<anonymous> </app/node_modules/socket.io/node_modules/socket.io-parser/node_modules/emitter/index.js:6:13>
    at Module._compile <module.js:456:26>
    at Object.Module._extensions..js <module.js:474:10>
    at Module.load <module.js:356:32>
    at Functin.Module._load <module.js:312:12>
    at Module.require <module.js:364:17>

因此,我发现indexof是Socket.IO使用的一个模块,它在我的node_modules文件夹中,但出于某种原因,它不是被推送到heroku,就是没有被识别。我重新安装了我的模块5-6次,并重新创建了应用程序,但它仍然给我同样的错误。我的package.json文件有3个依赖项: Express、Socket.IO和Jade

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-02 05:11:00

好的,2小时后我发现了问题,包含模块索引的多个名为"emitter“的文件夹也有一个gitignore文件,使得git忽略了模块,不知道为什么会有这个问题,但是删除它们解决了问题。

票数 33
EN

Stack Overflow用户

发布于 2020-03-25 05:16:33

在我的例子中,我不得不向依赖项中添加几个模块,因为它们只是在dependencies下,而不是在生产基础上构建的。

票数 0
EN

Stack Overflow用户

发布于 2021-05-16 12:26:59

我也有同样的问题,请仔细阅读

这些是socket.io相关问题的解决方案,我希望我能工作。

  1. 您(index.js或server.js) & (index.html和client.js)端口中的端口必须不同。(请参阅以下代码)

=============your index.js文件====================== (这里的端口是8000)

代码语言:javascript
复制
const express = require("express")
var app = express();
const http = require('http')
var server = http.createServer(app);
  
const port = process.env.PORT || 8000
server.listen(port,()=>
{
    console.log("Listening at port => "+port)
});
var io = require('socket.io')(server, {
    cors: {
      origin: '*',
    }
});

const cors = require("cors")
app.use(cors()) 

=============your client.js文件======================端口是8080

代码语言:javascript
复制
const socket = io.connect('https://localhost:8080/')

=============your index.html文件======================端口是8080

代码语言:javascript
复制
 <script defer src="https://localhost:8080/socket.io/socket.io.js"> 
 </script>

记住,您的"server.js或index.js“端口应该与"client.js”端口不同(请记住这一点很重要) (index.html和client.js)端口必须相同。

  1. 在使用socket.io时,应该始终使用“http”(参见上面的代码)

  1. U不能包含cors,因为它允许您拥有更多的资源,没有cors heroku可以防止某些依赖项无法在heroku中安装(参见上面的代码)

  1. 尝试将"io“替换为"io.connect” const = io.connect('https://localhost:8080/')

  1. 必须在HTML的末尾写入标记

  1. 您可能忘记添加"socket.io“中必须包含的代码。

它在html文件中是必需的。

  1. 删除"node_modules“和"package-lock.json”,并在cmd中写入"npm i“。

  1. 这应该在package.json的脚本中。 “开始”:“节点index.js",

我不是在说无恶魔,这里用简单的节点

  1. 可能是版本造成了问题,您可以通过将所有"devDependencies“复制到"package.json”中的“依赖项”并将"*“放在像下面这样的版本中来避免它。 “依赖关系”:{ "cors":"*", “快件”:"*", “无恶魔”:"*", Socket.io:"*“ }, "devDependencies":{}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23987571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档