使用node和express的REST调用在本地成功,但在部署到azure后失败

时间:2012-06-28 20:16:15

标签: node.js rest azure express

我有一个非常基本的REST调用,使用node / express编写,需要2个日期时间作为参数(http:// localhost:3000 / schedules /'2012-06-28T16:00:00'/'2012-06 -28T19:00:00')当我直接在节点可执行文件上运行我的测试时(在Windows上和我的Mac上)它在本地工作正常但是当我通过git将它部署到Azure时,我得到臭名昭着的黄色屏幕。

来自azure的调试日志是空的(永远不会到达我的node.logs节点)所以我猜测错误发生在iisnode的某个地方,然后才被路由到节点exe。如果我使用以下格式(http:// localhost:3000 / schedules / 2012-06-28 / 2012-06-29),则调用可以正常工作。我正要安装iisnode来测试一下,但是我想知道是否有其他人在深入研究之前遇到过这个问题。

以下是一些部分代码:

路由

app.param('startdate',
function(req, res, next, startdate) {
    req.startdate = startdate;
    next();
});

app.param('enddate',
function(req, res, next, enddate) {
    req.enddate = enddate;
    next();
});

app.get('/schedules/:startdate/:enddate',scheduleController.getSchedulesByStartDateAndEndDate);

scheduleController

exports.getSchedulesByStartDateAndEndDate = function(req, res){
    console.log('getSchedulesByStartDateAndEndDate');
    console.log('StartDate'+req.params.startdate);
    console.log('EndDate'+req.params.enddate);
    ScheduleProvider.getSchedulesByStartDateAndEndDate(req.params.startdate,     req.params.enddate,function(schedules){
        res.send(schedules);
    });
};

scheduleProvider

ScheduleProvider.prototype.getSchedulesByStartDateAndEndDate =     function(startdate,enddate,callback){
console.log(startdate);
console.log(enddate);
var stDate = startdate;
var endDate = enddate;
if (stDate !== undefined) {
    var startDate = new Date(unescape(stDate.toString()).replace(/'/gi, ""));
    endDate = new Date(endDate === undefined ? startDate: unescape(endDate.toString()).replace(/'/gi, ""));
    var sttimes = getTimes(startDate);
    var endtimes = getTimes(endDate);
    console.log(startDate);
    console.log(endDate);
    console.log(sttimes[0]);
    console.log(sttimes[1]);
    console.log(endtimes[0]);
    console.log(endtimes[1]);

    Schedule.find({
        $or: [
        {
            'StartDate': {
                $gte: sttimes[0],
                $lt: endtimes[1]
            }
        },
        {
            'EndDate': {
                $gt: sttimes[0],
                $lte: endtimes[1]
            }
        }
        ]
    }, function(err, schedules){
    callback(schedules);
}).sort('StartDate', 'ascending');
}
};

我正在使用mongoose进行调用,但我认为它不会访问提供程序或控制器代码。这几乎就像azure不喜欢传入的日期并抛出异常。

1 个答案:

答案 0 :(得分:0)

在本地运行时,您直接使用Node来托管应用程序。在Windows Azure网站中运行时,您同时使用IIS和IISNode以及Node。我怀疑你在使用IIS处理单引号和Node(本地)没有这样做时遇到问题。您应该尝试在IIS(使用IISNode)本地运行该站点,以查看是否存在相同的问题。可能最简单的方法是在Windows Azure模拟器中运行该站点,因为您可以使用该工具来部署您的应用程序。