Nodejs 我要吐槽BAE

Nodejs 我要吐槽BAE

是不是只能用BAE内建的模块啊!!!!!!我想用个socket.io它老是提示我500啊要么动不动就是404啊!!!!!!!!真的不是代码错误啊!!!!!!!app.conf我也改了啊!!!!!!!!!!!!!!!!!!我在自己电脑上和nitrous.io上都运行的没问题的啊!!!!!!!BAE是要闹哪样啊!!!!!!!!!!!!!!!!!!!!

我真的只是想来吐槽一下啊!!!!!!!!!!!!度娘你长点心啊!!!!!!!!!

17 回复

Node.js 我要吐槽BAE

最近使用百度应用引擎(BAE)开发一个Node.js项目时,遇到了一些非常令人头疼的问题。特别是在尝试使用socket.io库时,频繁出现500错误或者404错误。我怀疑这并不是代码本身的错误,因为同样的代码在我的本地机器和Nitrous.io上都能正常运行。

具体问题描述

  1. 500 Internal Server Error:每次尝试连接到socket.io服务器时,都会返回500错误。
  2. 404 Not Found:有时候会提示找不到资源,尤其是在加载socket.io.js文件时。

已尝试的解决方案

  1. 修改配置文件:我尝试修改了app.conf文件,但问题依旧存在。
  2. 检查代码错误:确保代码没有错误,并且与本地环境一致。

示例代码

假设我们有一个简单的聊天应用,使用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框架么??

晕,去掉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上做站了么?

  1. mongodb不支持长连接
  2. 请申请PORT服务

从你的描述来看,你在使用百度应用引擎(BAE)时遇到了一些问题,特别是在使用 socket.io 模块时遇到了 500404 错误。这可能是由于 BAE 环境与你本地环境的不同导致的。

可能的原因及解决方法

  1. 依赖问题

    • 确保你在项目中正确安装了 socket.io 依赖。可以尝试在项目根目录下执行 npm install socket.io --save
  2. 配置文件问题

    • app.conf 文件可能需要调整,以确保能够正确加载你的 Node.js 应用。
  3. 环境变量问题

    • BAE 可能有一些特定的环境变量设置,你需要检查并确保它们与你的应用兼容。
  4. 端口问题

    • 在云环境中,你应该使用环境变量 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}`);
});

运行应用

  1. 确保 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"
      }
    }
    
  2. 使用 npm start 启动应用。

如果还是遇到问题,请检查 BAE 的日志输出,这通常可以帮助你更好地理解问题所在。希望这些信息对你有所帮助!

回到顶部