2014-10-06 31 views
1

我正在構建Node.js/Express 4中的第一個REST API。我正在通過Nano使用Couchdb。我爲Get,Put和Post準備了一些東西,但是Delete導致了一些問題。我得到的文件刪除,但我得到了一個404響應。我也試圖在Mocha中寫出適當的測試,這就是我如何獲得404以及與郵遞員手動測試。在Node.js中使用納米銷燬文檔

這是我到目前爲止有:

在我的路線:

router.delete('/:bear_id', function(req, res, done) { 
    console.log("deleting..." + req.params.bear_id); 
    bears.get(req.params.bear_id, function(err, body, header) { 
    if (!err) { 
     bears.destroy(req.params.bear_id, body._rev, function(err, body, header) { 
     if (!err) { 
      res.send(200, { message: "deleted " + req.params.bear_id}); 
     } 
     }); 
    } 
    done(); 
    }); 
}); 

在我的測試:

it('DELETE api/bears should delete the test_bear', function(done){ 
    var options = { 
    url: 'http://localhost:3001/api/bears/test_bear' 
    }; 
    setTimeout(function() { 

    request.del(options , function(err, res, body){ 
     expect(res.statusCode).to.equal(200); 
     expect(res.body).to.equal('{"message":"deleted test_bear"}'); 
     done(err); 
    }); 
    }, 100); 
}); 

回答

2

done()被稱爲出彎由於異步特性node.js

這導致表示檢查最有可能是您的路線或無路線的下一個路線。

router.delete('/:bear_id', function(req, res, done) { 
    console.log("deleting..." + req.params.bear_id); 
    bears.get(req.params.bear_id, function(err, body, header) { 
    if(err) { 
     return done(err); 
    } 
    bears.destroy(req.params.bear_id, body._rev, function(err, body, header) { 
     if(err) { 
     return done(err); 
     } 
     return res.send(200, { message: "deleted " + req.params.bear_id}); 
    }); 
    }); 
}); 

注:我建議你改變航線向done作爲next更好描述實際過程的表達路由。

+0

非常感謝你!這就像一個魅力,使異步調用更有意義。 – Paige 2014-10-06 20:23:57