0

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

来自 azure 的调试日志是空的(永远不会到达我的 console.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);

调度控制器

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.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 不喜欢传入的日期并引发异常。

4

1 回答 1

0

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

于 2012-07-22T00:47:35.120 回答