在我的Express应用程序中,我试图创建一个辅助函数来发送响应,这样我就不必继续键入它。但是,我在此上无法正常工作。我不断得到 this 的定义。
function sendMessage(code, message)
{
return this.res.status(code).json({message});
}
app.('/foo', (req, res) => {
return sendMessage(200, 'bar');
});
app.('/buzz', (req, res) => {
return sendMessage(200, 'bang');
});
答案 0 :(得分:1)
this
无法解决您的问题。
res
不是任何对象的属性,而是变量。
您需要将其传递给函数:
function sendMessage(res, code, message)
{
return res.status(code).json({message});
}
app.('/foo', (req, res) => {
return sendMessage(res, 200, 'bar');
});
答案 1 :(得分:0)
尝试
function sendMessage(res, {status,data})
{
return res.status(status).json(data)
}
app.('/foo', (req, res) => {
return sendMessage(res,{ status : 200, data : 'bar'});
});
答案 2 :(得分:0)
Express不使用动态this
,为了访问所需的中间件参数,应将它们传递给函数,如其他答案所示。
如果要提供具有自定义响应的中间件,则可以将高阶函数与可选的code
参数一起使用:
const createSendMessageMiddleware = (message, code = 200) => (req, res) => {
res.status(code).json({message});
}
app.get('/foo', createSendMessageMiddleware('bar'));
app.get('/buzz', createSendMessageMiddleware('bang'));
答案 3 :(得分:0)
function sendMessage(code, message,res) {
return res.send({code:code,message:message});
}
app.('/foo', (req, res) => {
return sendMessage(200, 'bar',res);
});
app.('/buzz', (req, res) => {
return sendMessage(200, 'bang',res);
});