2016-03-03 61 views
1

下面是一個簡單的路線:如何延長快遞JS資源對象的NodeJS

// get all users 
app.get('/api/user/get-all', authenticated.yes, function(req, res) { 
    queryUsers.findAllUsers(function(users){ 
     res.json(users); 
    }); 
}); 

輸出將是JSON從「queryUsers.findAllUsers」函數返回。

這是偉大的,但我想的路線,通過一些更剛性所有的json輸出,輸出將是:

res.json({ 
    success: true, 
    payload: users 
}); 

這是很容易做手工,但意味着我不得不寫這一點,每個這是很多打字的時間。

是否有可能以新的功能添加到 「資源」 的對象,以使這樣的事情:

res.jsonSuccess(users); 

和:

res.jsonFail(users); 

這將輸出

res.json({ 
    success: true, 
    payload: users 
}); 

和:

res.json({ 
    success: false, 
    payload: users 
}); 

回答

5

正如loadaverage指出的那樣,中間件就是你如何做到的。對於一些更專一:

app.use(function(req, res, next) { 

    res.jsonFail = function(users) { 
     return res.json({ 
      success: false, 
      payload: users 
     }) 
    }; 

    res.jsonSuccess = function(users) { 
     return res.json({ 
      success: true, 
      payload: users 
     }); 
    }; 

    next(); 
}); 

,然後這應該工作:

app.get("/my/route", function(req, res) { 
    return res.jsonSuccess(["you", "me"]); 
}); 
+0

AHHHH我得到它吧!一分錢一滴。非常感謝:D – John

0

當然,你可以寫一些簡單的middleware,然後像通常一樣app.use(yourmiddleware)。

1

有時我想用新的方法擴展當前的方法。例如,記錄我發送的所有內容。

這你可以做什麼:

app.use(function (req, res, next) { 
    var _send = res.send 
    res.send = function (data) { 
     console.log('log method on data', data) 
     // Call Original function 
     _send.apply(res, arguments) 
    }) 
}) 
+0

現在。我沒有。 'apply'獲取一系列參數。而'arguments'就是'send'得到的參數。我想在做我們的方法後用相同的'arguments'運行原始方法。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply – Aminadav