Nodejs 我要吐槽BAE
Nodejs 我要吐槽BAE
是不是只能用BAE内建的模块啊!!!!!!我想用个socket.io它老是提示我500啊要么动不动就是404啊!!!!!!!!真的不是代码错误啊!!!!!!!app.conf我也改了啊!!!!!!!!!!!!!!!!!!我在自己电脑上和nitrous.io上都运行的没问题的啊!!!!!!!BAE是要闹哪样啊!!!!!!!!!!!!!!!!!!!!
我真的只是想来吐槽一下啊!!!!!!!!!!!!度娘你长点心啊!!!!!!!!!
Node.js 我要吐槽BAE
最近使用百度应用引擎(BAE)开发一个Node.js项目时,遇到了一些非常令人头疼的问题。特别是在尝试使用socket.io
库时,频繁出现500错误或者404错误。我怀疑这并不是代码本身的错误,因为同样的代码在我的本地机器和Nitrous.io上都能正常运行。
具体问题描述
- 500 Internal Server Error:每次尝试连接到
socket.io
服务器时,都会返回500错误。 - 404 Not Found:有时候会提示找不到资源,尤其是在加载
socket.io.js
文件时。
已尝试的解决方案
- 修改配置文件:我尝试修改了
app.conf
文件,但问题依旧存在。 - 检查代码错误:确保代码没有错误,并且与本地环境一致。
示例代码
假设我们有一个简单的聊天应用,使用socket.io
进行实时通信。下面是简化后的代码示例:
// server.js
const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const app = express();
const server = http.createServer(app);
const io = socketIo(server);
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('chat message', (msg) => {
io.emit('chat message', msg);
});
socket.on('disconnect', () => {
console.log('user disconnected');
});
});
server.listen(3000, () => {
console.log('listening on *:3000');
});
客户端代码:
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
<title>Socket.IO chat</title>
<script src="/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
</head>
<body>
<ul id="messages"></ul>
<input id="m" autocomplete="off" /><button onclick="sendMessage()">Send</button>
<script>
var socket = io();
function sendMessage() {
var message = $('#m').val();
socket.emit('chat message', message);
$('#m').val('');
}
socket.on('chat message', function(msg) {
$('#messages').append($('<li>').text(msg));
});
</script>
</body>
</html>
总结
虽然我已经尽力排除了代码错误,但在BAE上仍然遇到各种问题。希望BAE能够改进其服务,减少这些不必要的困扰。同时,也希望社区中的其他开发者能分享一些关于如何在BAE上成功部署Node.js应用的经验。
希望这个回答对你有所帮助!如果你有更多的问题或需要进一步的帮助,请随时告诉我。
没用过BAE,猜测是BAE不支持websocket,可以试试改一下socket.io的transports设置
io.configure(function () {
geddy.io.set("transports", ["xhr-polling"]);
geddy.io.set("polling duration", 10);
});
晕,去掉geddy。。。无法编辑。。。能看懂就行了
要不我日本的linode的ubuntu服务器分你? 包年500吧。。只要你不要占资源太夸张,就ok。。
可以绑定域名,然后不需要备案。 默认帮你用nginx,然后后面跑nodejs。数据库你要用mysql, mongodb, rethinkdb都可以,我自己的也在上面跑的。
上次弄mongodb也是,会自动断掉然后一段时间连不上。
已放弃bae
我就自己弄着玩。。。还是谢谢你。。。
应该是这样的,socket.io需要新开启端口,而bae是不支持绑定新端口的,这个是一般的PAAS的通病。
赶脚是个渣渣:(
BAE还在官方github wiki的支持列表里…
确实很渣!
bae支持socket.io的,mongodb确实常常断开
你可以试试红帽的免费Openshift,我目前用的就是它而且free。或者是Koding不过Koding不适合部署,只是实验用的。
BAE就是个渣渣, 体验不好,还收费:(
赶脚koding收费很贵:( 楼上在openshift上做站了么?
- mongodb不支持长连接
- 请申请PORT服务
从你的描述来看,你在使用百度应用引擎(BAE)时遇到了一些问题,特别是在使用 socket.io
模块时遇到了 500
和 404
错误。这可能是由于 BAE 环境与你本地环境的不同导致的。
可能的原因及解决方法
-
依赖问题:
- 确保你在项目中正确安装了
socket.io
依赖。可以尝试在项目根目录下执行npm install socket.io --save
。
- 确保你在项目中正确安装了
-
配置文件问题:
app.conf
文件可能需要调整,以确保能够正确加载你的 Node.js 应用。
-
环境变量问题:
- BAE 可能有一些特定的环境变量设置,你需要检查并确保它们与你的应用兼容。
-
端口问题:
- 在云环境中,你应该使用环境变量
process.env.PORT
来获取正确的端口号,而不是硬编码端口号。
- 在云环境中,你应该使用环境变量
示例代码
// app.js
const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const app = express();
const server = http.createServer(app);
const io = socketIo(server);
io.on('connection', (socket) => {
console.log('A user connected');
socket.on('disconnect', () => {
console.log('User disconnected');
});
});
server.listen(process.env.PORT || 3000, () => {
console.log(`Server is running on port ${process.env.PORT || 3000}`);
});
运行应用
-
确保
package.json
文件中有正确的启动脚本:{ "name": "your-app-name", "version": "1.0.0", "main": "app.js", "scripts": { "start": "node app.js" }, "dependencies": { "express": "^4.17.1", "socket.io": "^2.3.0" } }
-
使用
npm start
启动应用。
如果还是遇到问题,请检查 BAE 的日志输出,这通常可以帮助你更好地理解问题所在。希望这些信息对你有所帮助!