【问题标题】:How to extract response object from express?如何从快递中提取响应对象?
【发布时间】:2021-03-17 17:53:39
【问题描述】:

我正在尝试使用 mysql 构建一个 nodejs 应用程序,而我想要的是 我发送的控制器和消息应该在单独的文件中 如下图

这是我的身份验证控制器文件

exports.signup = (req, res) => {
  try {
    const { name, username, email, phone_number, gender } = req.body;
    const payload = [name, username, email, phone_number, gender];
    connection.query(signupUserQuery, payload, (error) => {
      if (error) {
        return errorMessage('Signup Failed');
      } else {
        return createdMessage('Signup SuccessFul');
      }
    });
  } catch (error) {
    return errorMessage('Signup Failed');
  }
};

这是我保存消息的消息文件

module.exports = {
  createdMessage: function (message) {
    return res.status(201).json({
      isError: false,
      message: message,
    });
  },
  errorMessage: function (message) {
    return res.status(500).json({
      isError: true,
      message: message,
    });
  },
};

所以我想要的是每当执行控制器时我想返回这个函数但问题是当我尝试这样做时我得到错误因为 res 没有定义, 那么有没有办法在这个messages.js文件中使用res

我尝试过的是从控制器发送 res 对象,这可行,但这是重复的,我不想重复自己

还有一件事我在单独的文件链接中写了我的查询

insert into tbl_user (name,username,email,phone_number,gender) values (?,?,?,?,?)

但这里的问题是我必须根据我需要的字段打上问号 那么有没有办法在一个问号中做到这一点?

【问题讨论】:

  • 在您的注册功能中,您需要阅读此How do I return the response from an asynchronous call,因为该功能没有返回任何内容。您的 return 语句只是回到回调函数中。我不明白你的其余问题。
  • @jfriend00 如果我从我的控制器发送这样的 res 对象 return createdMessage(res, 'Signup SuccessFul');它显示类似这样的内容并返回消息prntscr.com/10oempy,但我不想每次调用消息时都发送 res 对象,这就是为什么如果我可以将 res 对象与 express 分开会很棒
  • 抱歉,我不明白这是什么意思。如果您想在其他文件的函数中使用res,则必须将其作为参数传递给该函数,因为res 是一个瞬态对象,对于每个请求都不同。
  • 老实说,我无法说出您想要询问的内容。如果你想在另一个模块的函数中使用res,你必须将它传递给那个函数。没有其他办法。如果你可以让你的函数不直接使用res,方法是获取函数需要的任何东西并直接传递这些参数,这样你就可以传递数据并让它返回数据,那么你不需要传递它res,但这是唯一的方法。
  • 没有“从 Express 中提取资源”之类的东西。 res 是一个来自底层 http 服务器的对象,Express 使用方法和数据进行了修改。例如,res.send() 是 Express 添加的方法。没有提取。您要么传递res 本身,要么从res 获取属性并将这些属性传递给您的函数。如果您的 errorMessage() 函数想要实际发送对 http 请求的响应,您必须将 res 传递给它 - 无论有没有 Express,都没有其他方法。

标签: javascript mysql node.js express


【解决方案1】:

你可以这样使用它。

这是你的 messages.js 文件。

function createdMessage (message) {
  return {
      isError: false,
      message: message
  }
}

function errorMessage (message) {
  return {
      isError: true,
      message: message
  }
}



module.export = {
  createdMessage,
  errorMessage
}

这是认证控制器.js

const { createdMessage, errorMessage } = require("./messages.js");
exports.signup = (req, res) => {
  try {
    const { name, username, email, phone_number, gender } = req.body;
    const payload = [name, username, email, phone_number, gender];
    connection.query(signupUserQuery, payload, (error) => {
      if (error) {
        return res
        .status(400)
        .send(errorMessage('Signup Failed'));
      } else {
        return res
        .status(201)
        .send(createdMessage('Signup SuccessFul'));
      }
    });
  } catch (error) {
        return res
        .status(400)
        .send(errorMessage('Signup Failed'));
  }
};

【讨论】:

  • 我试过了,效果很好,但是有什么办法让我不必每次都写 res.status(statuCode)
  • 对不起,没有。状态是res 对象的函数。如果您不想将 res 对象发送到其他函数。这是最好的方法。
猜你喜欢
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
相关资源
最近更新 更多