我正在构建一个REST API(在Node上带有ExpressJS)作为我当前项目的一部分,但是当我尝试通过jQuery进行POST时遇到了一个奇怪的问题。
当我从用户界面触发此来电,并观看Chrome开发工具的网络标签时,该通话会在失败前暂停一段时间。显然,服务器端正在发生一些事情。跳转到我的节点控制台,看起来每当我进行此POST时,我的控制台都输出如下内容:
{ message: 'Cast to ObjectId failed for value "jquery-1.10.2.min.map" at path "_id"',
name: 'CastError',
type: 'ObjectId',
value: 'jquery-1.10.2.min.map',
path: '_id' }
如果我没有弄错的话,这是一条Mongoose错误消息。但是,我的API代码中的断点永远不会被击中。看起来jQuery调用和API执行之间发生了一些事情。我将附上以下源代码,以证明有用。有没有人见过这样的东西?
$.ajax({
type: "POST",
url: "/api/DataPoint/UpdateIdentifier",
dataType: "json",
data: {
dataPointID : dataPointID,
newValue : newVal,
identifierIndex: identifierIndex
},
complete: dataUpdateCompleteHandler,
success: dataUpdateSuccessHandler,
error: dataUpdateErrorHandler
});
app.post("/api/DataPoint/UpdateIdentifier", function(req, res){
var datapointID = req.body.dataPointID,
newValue = req.body.newValue,
identifierIndex = req.body.identifierIndex;
DataPoint.findById(datapointID)
.exec(function(err, datapoint){
if (err) return console.log(err);
datapoint.customIdentifiers[identifierIndex] = newValue;
datapoint.save(function(err){
if (err) res.json(err);
else res.send(200);
});
});
});
答案 0 :(得分:1)
您可以通过编辑jquery副本来禁用地图。
就不响应而言,我猜你将错误记录到stdout,但是你没有回复请求。所以改变这个:
if (err) return console.log(err);
类似于:
if (err) {
err.status = 500;
next(err);
// or use `res.json(err);` instead of `next(err);` if that's what
// you're expecting on the client side
return console.log(err);
}
并在next
之后在该路由处理程序的函数参数列表中添加res
:
app.post("/api/DataPoint/UpdateIdentifier", function(req, res, next){