如何在快递中使用THIS?

时间:2019-03-01 11:42:29

标签: javascript node.js express

在我的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');
});

4 个答案:

答案 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);
    });