記錄一個比較不常用到的操作方式...
以client使用request module為例...
http delete method中,某些client遇到error時,解讀回覆部分不是直接取用body
而是去解析error物件來做回覆
此時如何從server端製作一個錯誤來讓client操作呢...
Client side:
var opts = {url:'http://localhost:1337/test/123', method:'DELETE'};
request(
opts,
function(error,res,body) {
console.log(e);
}
);
此時server side的實作,以express為例,只需要在res.send()中依序帶入:
- 第一個欄位設定錯誤代碼
- 第二個欄位為錯誤物件描述,建議以JSON為格式(預設格式為{code: xxx, message:xxx},若符合此格式,回覆時候匯自動取message內文做為error的message欄位,並會在error物件中多一個code的欄位}
下面模擬del協定,於呼叫時候丟錯:
Server side:
app.del('/test/:id', function(req, res) {
res.send(400, {code:"test error", message:"the tested error"});
});
此時client的console pring匯出現下面訊息:
Client result:
{ message: 'the tested error',
body: { code: 'test error', message: 'the tested error' },
httpCode: 400,
statusCode: 400,
restCode: 'test error',
code: 'test error' }
如上描述,如果server改寫response回傳物件(不使用預設格式)...
Server side:
app.del('/test/:id', function(req, res) {
res.send(400, {coder:"test error", msg:"the tested error"});
});
則,error物件會長這樣子:
{ message: '{\n "coder": "test error",\n "msg": "the tested error"\n}',
body: { coder: 'test error', msg: 'the tested error' },
httpCode: 400,
statusCode: 400 }