Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Heroku上运行NodeJS服务器

在Heroku上运行NodeJS服务器
EN

Stack Overflow用户
提问于 2014-07-04 09:05:23
回答 2查看 998关注 0票数 0

我刚刚在Heroku上安装了一个NodeJS服务器,通过遍历入门指南(https://devcenter.heroku.com/articles/getting-started-with-nodejs),我认为我正确地完成了所有步骤。

但是,当我转到heroku (http://secure-caverns-6779.herokuapp.com/)生成的url时,它会显示一个应用程序错误。我不知道这是否是我编写的.js服务器的预期行为,但无论如何,它不是我想要的。

这就是我想要做的,并在localhost上进行正确的测试:

  1. 从网页中,向NodeJS服务器发送一些get请求。
  2. 在NodeJS服务器上对MongoDB数据库进行一些调用。
  3. (从NodeJS服务器,将一些数据发送回另一个服务,但这在这里并不重要)

--这是我上传到Heroku并在本地测试的server.js文件,没有问题(为了简洁起见,省略了一些部分):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var http = require("http"),
    url = require('url'),
    req = require("request"),
    qs = require('querystring'),
    async = require("async"),
    mongojs = require("mongojs"),
    JSONStream = require('JSONStream'),
    open = require('open'),
    webURI = "[web uri here]";

var uri = "[mongoDB uri here]",
    db = mongojs.connect(uri, ["db_name"]);

var server = http.createServer(requestHandler);

...some functions (example below)...

function addTrack(post,callback){
    var partyId = post['partyId'], trackId = post['trackId'];
    db.db_name.update({id: parseInt(partyId)}, { $push: { tracks: trackId } }, function(err, added) {
        if( err || !added ) {
            console.log("Track could not be added.");
            callback(null,added);
        }
        else {
            console.log("Track("+trackId+") added to Party("+partyId+")");
            callback(null,added);
        }
    });
}

function requestHandler(request, response) {
    response.setHeader('Access-Control-Allow-Origin', '*');
    response.writeHead(200, {"Content-Type": "application/json"});
    var pathname = url.parse(request.url, true).pathname;
    switch (true) {

        ...some switch cases...

        case request.method === 'POST' && /\/addTrack/.test(pathname):
            var body = '';
            request.on('data', function (data) {
                body += data;
                // Too much POST data, kill the connection!
                if (body.length > 1e6)
                    req.connection.destroy();
            });
            request.on('end', function () {
                var post = qs.parse(body);
                addTrack(post, function(err, added) {
                    response.write(JSON.stringify({ status: added }));
                    response.end();
                });
            });
            break;

    }
}

var port = Number(process.env.PORT || 5000);
server.listen(port, function() {
    console.log("Listening on " + port);
});

因此,重申一下,我在本地测试了这个server.js,所有这些都很好。现在,我在将它上传到Heroku之后进行测试(完成了所有步骤,包括创建Procfile和package.json等)。但不起作用。我用来发送GET/POST请求的url是:http://secure-caverns-6779.herokuapp.com/,我认为这是server.js应该在的位置。注意,我不希望server.js创建网页或其他任何东西,只处理调用和与MongoDB数据库的通信。

我从本地网页向NodeJS服务器发出的jquery请求示例如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$.get("http://127.0.0.1:8888/server.js/trackAdded", "partyId=" + partyId + "&trackId=" + value.id, function (json) {
     ...
}, 'json');

这里的错误是什么,我应该取一个不同的url,添加一个端口吗?在url中添加"/server,js“?

致以亲切的问候,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-04 09:11:17

在将项目部署到heroku的控制台中使用"heroku日志“,并查找其中显示有错误的位置:)

票数 1
EN

Stack Overflow用户

发布于 2014-07-04 09:23:55

根据您所说的,Heroku应该用http://secure-caverns-6779.herokuapp.com/替换您的基本url http://secure-caverns-6779.herokuapp.com/

因此,如果http://127.0.0.1:8888/server.js/trackAdded在本地工作,http://secure-caverns-6779.herokuapp.com/server.js/trackAdded也应该工作。我在这里进行了测试,它返回了一个json对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"status":0}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24578549

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文