【发布时间】:2017-09-04 00:20:18
【问题描述】:
我有一段代码通过 Jquery 发送 DELETE 请求,如下所示:
$(document).ready(function(){
$('.formula-block').on('click', function(e){
if (e.target.className == 'button-warning pure-button') {
$.ajax({
url: '/formula-list/' + this.id,
type: 'DELETE',
success: reload
});
}
});
function reload () {
window.location.reload(true);
}
});
在我更新我的应用程序中的一个中间件之前,这一直很好。
我在app.js 文件中使用以下 sn-p 使 MongoDB 可用于我的程序:
app.use((req, res, next) => {
mongo.connect('mongodb://localhost:27017/formulas', (e, db) => {
if (e) return next(e);
req.db = db;
next();
});
});
但是,我最近在最后一对括号之前添加了以下代码行
req.on('end', () => { req.db.close(); });
现在我的AJAX 请求中的SUCCESS 部分不再有效。
我认为这是因为 AJAX 请求正在等待响应而没有得到响应,因为最后一行正在剪裁它,所以永远不会调用 success。
我的主要问题是我希望页面在某些内容被删除后刷新更新的项目列表。我不知道这是怎么发生的,但现在我的安排不再奏效了。
如果有帮助,这里是接收到DELETE 请求的服务器端代码:
router.delete('/formula-list/:id', function(req, res){
var db = req.db.collection('users');
var f_id = new ObjectID(req.params.id);
db.updateOne({"_id": new ObjectID(req.user.id)}, { $pull: {
"formulas": {"f_id": f_id}
}}, function(err, r){
if(err) {throw err;}
assert.equal(null, err);
});
});
【问题讨论】:
-
查看 Chrome 调试器的网络选项卡,看看您是否从您的 ajax 调用中得到任何响应,如果是,那么该响应是什么。您首先需要知道返回给客户端的内容是什么,或者问题是否在于没有发送响应。
-
你在打电话给
res.send吗?顺便说一句,在尝试关闭连接或在连接回调中侦听 req end 事件之前,您应该检查您的 req 中是否定义了 db。 -
我看不到您实际发送请求响应的任何地方。在您在服务器上执行
res.send(...)之前,浏览器不会知道请求已完成。因此,当您的数据库操作完成后,您应该res.send()向客户端返回一些内容,以便客户端知道请求已完成。
标签: javascript jquery node.js mongodb express