>  기사  >  웹 프론트엔드  >  node Express 프레임워크의 res.send() 및 res.end()에 대한 간략한 분석

node Express 프레임워크의 res.send() 및 res.end()에 대한 간략한 분석

青灯夜游
青灯夜游앞으로
2022-01-21 18:57:022031검색

이 기사에서는 node Express 프레임워크에 대해 이야기하고 Express의 res.send() 및 res.end()에 대해 배울 수 있습니다. 모든 사람에게 도움이 되기를 바랍니다.

node Express 프레임워크의 res.send() 및 res.end()에 대한 간략한 분석

Node.jsNode.js 的服务端代码中,如果使用的是 Express 框架,那么对于一个请求,常常会有两种响应方式:

// 方法1
app.get("/end", (req, res, next) =>{
    res.end(xxx);
});
// 方法2
app.get("/send", (req, res, next) =>{
    res.send(xxx);
});

那么这两种方式究竟有何区别?各自的应用场景分别是什么?这是我今天需要讲清楚的。

Express 之 res.end()

定义

它可以在不需要任何数据的情况下快速结束响应。

这个方法实际上来自 Node 核心,具体来说是 http.ServerResponse.Useresponse.end() 方法:

node Express 프레임워크의 res.send() 및 res.end()에 대한 간략한 분석

语法

res.end([data[, encoding]][, callback])

参数解析:

  • data |
  • encoding
  • callback

深入

如果给 res.end() 方法传入一个对象,会发生报错:

node Express 프레임워크의 res.send() 및 res.end()에 대한 간략한 분석

Express 之 res.send()

定义

向请求客户端发送 HTTP 响应消息。

语法

res.send([body[,statusCode]])

body 参数可以是 Buffer、Object、String、Boolean 或 Array。

深入

通过代码调试,我们可以发现,Express 的 res.send() 方法最终调用的也是 http.ServerResponse.Useresponse.end() 方法:

// node_modules/express/lib/response.js
res.send = function send(body) {
  var chunk = body;
  var encoding;
  ……
  if (req.method === 'HEAD') {
    // skip body for HEAD
    this.end();
  } else {
    // respond
    this.end(chunk, encoding);
  }
  return this;
};

对比

相同点

Express 的 res.end() 和 res.send() 方法的相同点:

  • 二者最终都是回归到  http.ServerResponse.Useresponse.end() 方法。

  • 二者都会结束当前响应流程。

不同点

Express 的 res.end() 和 res.send() 方法的不同点:

  • 前者只能发送 string 或者 Buffer 类型,后者可以发送任何类型数据。

  • 从语义来看,前者更适合没有任何响应数据的场景,而后者更适合于存在响应数据的场景。

总结

Express 的 res.end() 和 res.send() 方法使用上,一般建议使用 res.send()를 사용하는 서버 측 코드에서 Express 프레임워크를 사용하는 경우 요청에 대해 두 가지 응답 방법이 있는 경우가 많습니다.

rrreee

그렇다면 이것은 무엇입니까? 두 방법의 차이점은 무엇인가요? 각각의 적용 시나리오는 무엇입니까? 오늘 제가 분명히 밝혀야 할 점은 이것입니다.

Express res.end()

정의 데이터가 필요 없이 빠르게 응답을 종료할 수 있습니다.

🎜이 메서드는 실제로 Node 코어, 특히 http.ServerResponse.Useresponse.end() 메서드에서 비롯됩니다. 🎜🎜node Express 프레임워크의 res.send() 및 res.end()에 대한 간략한 분석🎜🎜구문🎜rrreee🎜매개변수 분석: 🎜
  • 데이터 |
  • 인코딩 li>
  • 콜백
🎜Deep 🎜🎜주어진 경우 res.end() 메서드가 객체를 전달하면 오류가 발생합니다: 🎜🎜node Express 프레임워크의 res.send() 및 res.end()에 대한 간략한 분석🎜

Express res.send()

🎜정의🎜🎜요청 클라이언트에게 HTTP 응답 메시지를 보냅니다. 🎜🎜구문🎜rrreee🎜body 매개변수는 버퍼, 개체, 문자열, 부울 또는 배열일 수 있습니다. 🎜🎜더 자세히🎜🎜코드 디버깅을 통해 Express의 res.send()를 찾을 수 있습니다. > 이 메서드는 궁극적으로 http.ServerResponse.Useresponse.end() 메서드를 호출합니다. 🎜rrreee

비교 code> h2>🎜동일성🎜🎜Express의 res.end() 및 res.send() 메소드 간의 동일성 : 🎜
  • 🎜둘 다 결국 http.ServerResponse.Useresponse.end() 메소드. 🎜
  • 🎜둘 다 현재 응답 프로세스를 종료합니다. 🎜
🎜차이점🎜🎜Express의 res.end() 및 res.send( ) 방법의 차이점: 🎜
  • 🎜전자는 문자열이나 버퍼 유형만 보낼 수 있지만 후자는 모든 유형의 데이터를 보낼 수 있습니다. 🎜
  • 🎜의미론적으로 전자는 응답 데이터가 없는 시나리오에 더 적합하고, 후자는 응답 데이터가 있는 시나리오에 더 적합합니다. 🎜

요약

🎜Express의 res.end() 및 res.send() 메서드를 사용할 때 일반적으로 다음을 권장합니다. 를 사용하세요 res.send() 메소드로 충분하므로 Express가 내부적으로 데이터를 처리하기 때문에 응답 데이터의 형식에 신경 쓸 필요가 없습니다. 🎜🎜~이 글이 끝났습니다. 읽어주셔서 감사합니다! 🎜🎜노드 관련 지식을 더 보려면 🎜nodejs 튜토리얼🎜을 방문하세요! ! 🎜

위 내용은 node Express 프레임워크의 res.send() 및 res.end()에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제