我使用Node.JS和Socket.IO创建了一个简单的聊天应用程序,一切都在本地工作正常,但当我将它推送到heroku它给我一个应用程序错误,当我检查日志时,这是错误:
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
答案 0 :(得分:33)
好吧,所以2小时后我发现了问题,多个文件夹名为&#34; emitter&#34;包含indexof模块的还有一个gitignore文件,让git忽略了模块,不知道为什么会出现这种情况,但删除它们修复了问题
答案 1 :(得分:0)
在我的情况下,我不得不向依赖项添加一些模块,因为它们仅在devdependecies下,而不是在生产环境上构建
答案 2 :(得分:0)
我遇到了同样的问题,请仔细阅读
<块引用>这些是socket.io相关问题的解决方案
<块引用>我希望我能工作
============您的 index.js 文件 ========================
<块引用>(这里的端口是 8000)
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())
<块引用>
============您的 client.js 文件 ======================
<块引用>这里的端口是 8080
const socket = io.connect('https://localhost:8080/')
<块引用>
============您的 index.html 文件 ======================
<块引用>这里的端口是 8080
<script defer src="https://localhost:8080/socket.io/socket.io.js">
</script>
<块引用>
记住你的“server.js or index.js”端口应该和“client.js”端口不同(记住这很重要)
<块引用>(index.html 和你的 client.js) 端口必须相同
在使用 socket.io 时,您应该始终使用“http”(请参阅上面的代码)
你可能不包括 cors 因为它允许你有更多的资源,没有 cors heroku 防止某些依赖项无法安装在 heroku 中(参考上面的代码)
尝试将“io”替换为“io.connect”
const socket = io.connect('https://localhost:8080/')
必须在 HTML 的末尾写标签
你可能忘记在“socket.io”中添加这个必须的代码
在您的 html 文件中是必需的
删除“node_modules”和“package-lock.json” 并在 cmd 中写入“npm i”
这应该在 package.json 的脚本中
"start":"node index.js",
我不是在谈论 nodemon ,在这里使用简单的 node
可能是版本造成了问题,您可以通过将所有“devDependencies”复制到“package.json”中的“dependencies”并像这样在版本中放置“*”来避免它
“依赖项”:{
"cors": "*",
"express": "*",
"nodemon": "*",
"socket.io": "*"
},
“devDependencies”:{}