2017-09-03 1 views
-1

를 추가 한 후 완료되지 I는 다음과 같습니다 jQuery를 통해 DELETE 요청을 보냅니다 코드 조각이있다. 내 app.js 파일에 내 프로그램을 사용할 수 MongoDB를 만들기 위해 다음 코드를 사용하여 한AJAX 요청 익스프레스 미들웨어

는 :

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); 
    }); 
}); 
+0

크롬 디버거의 네트워크 탭을보고 만약 그렇다면 그 반응이 무엇인지, 당신이 다시 아약스 호출에서 어떤 반응을 얻고 있는지 여부를 확인하고 :

트릭을했다. 먼저 클라이언트로 무엇이 돌아가고 있는지 또는 응답이 전송되지 않는지 여부를 알아야합니다. – jfriend00

+0

'res.send'를 부르시겠습니까?Btw, 연결을 닫으려고하거나 연결 콜백에서 req end 이벤트를 수신하기 전에 db가 req에 정의되어 있는지 확인해야합니다. –

+0

요청에 대한 응답을 실제로 보내고있는 곳이 어디에도 표시되지 않습니다. 브라우저는 서버에서'res.send (...)'를하기 전까지 요청이 끝났음을 알지 못할 것입니다. 그래서 DB 작업이 끝나면 요청이 완료되었음을 알 수 있도록 클라이언트에게 다시 res.send()를 보내야한다. – jfriend00

답변

1

나는 당신의 문제를 해결하는 방법을 몰라,하지만 어쩌면 당신은에 error 핸들러를 추가하여 몇 가지 통찰력을 얻을 수 있습니다 당신의 AJAX 호출 :

$.ajax({ 
 
    url: '/formula-list/' + this.id, 
 
    type: 'DELETE', 
 
    success: reload, 
 
    error: function() { 
 
     console.log(arguments); 
 
    } 
 
    });

는 AJAX 성공 핸들러하는 경우 이전에 작업했고 더 이상 그렇지 않은 경우 오류가 발생할 가능성이 큽니다. 희망이 도움이!

+0

팁 주셔서 감사합니다,하지만 이걸 실행할 때 오류가 나타나지 않습니다. –

+0

일부 디버깅을 시도하십시오. 1. AJAX 호출이 전송되는지 확인하십시오. 2. 백엔드에 인쇄 문을 추가하십시오. 희망을 찾으십시오! –

+0

요청이 타격 중입니다. 수동으로 페이지를 새로 고치면 모든 것이 업데이트됩니다. 그리고 내가 여기에 문제가 생겼을 때'req.on ('close') .... '를 추가하기 전에는 제대로 작동한다고 말했던 것처럼. –

0

complete: function(){reload}과 같은 작업을 시도해보십시오. 그러면 삭제 기능이 완료되면 아약스가 다시로드됩니다.

(사이드 노트 : 내가 전에 이러한 유형의 문제로 실행하고 다른 사람들이 delete 방법을 지원하지 않기 때문에이 특정 브라우저에서 작동)

가 도움이 희망을!

0

제 질문에 대한 의견에 따르면 문제는 내 요청에 대해 어떤 종류의 응답도 명시 적으로 작성하지 않은 것이 문제였습니다.

내 표현 스 니펫에 res.end()을 추가하면 문제가 해결되었습니다.

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){ 
      assert.equal(null, err); 
      assert.equal(1, r.modifiedCount); 
      }); 
    res.end(); 
}); 
관련 문제