我有一个非常基本的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不喜欢传入的日期并抛出异常。
答案 0 :(得分:0)
在本地运行时,您直接使用Node来托管应用程序。在Windows Azure网站中运行时,您同时使用IIS和IISNode以及Node。我怀疑你在使用IIS处理单引号和Node(本地)没有这样做时遇到问题。您应该尝试在IIS(使用IISNode)本地运行该站点,以查看是否存在相同的问题。可能最简单的方法是在Windows Azure模拟器中运行该站点,因为您可以使用该工具来部署您的应用程序。