我有一个非常基本的 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 不喜欢传入的日期并引发异常。