Interaction With Server - Node.js, Express


Node.jsでのHTTPインタラクション


ベースノード.jsを使用すると、HTTPのリクエストと応答には次の内容が含まれます.

HTTPリクエスト(クライアント->サーバ)


方法->req.methodURL -> req.urlタイトル->req.headers本体->chunk、使用buffer

HTTPレスポンス(サーバ->クライアント)


レスポンスコード、ヘッダ->res.writeHead(200, '헤더정보')本体->res.end('바디 내용')Node.jsでボディを交換するプロセスは,Expressフレームワークを用いて上記のプロセスを簡単に解決できる.

Express



JavaScriptエコシステムでは、人気フレームワークの最初のアルファベットをMERN stack(MongoDB、Express、React、Node)と呼ぶ.ここでExpress.jsはノードです.jsに提供される高速でオープンで簡潔なWebフレームワークの1つで、ルーティング/セッション、リフレッシュなどの難しい問題を解決し、Webサーバを簡単に構築できます.
Expressのインストールと起動については、正式な書類を参照してください.正式なドキュメントの上部ラベルから読み取りとガイドを開始する必要があります.次のコードはexpressのインストールが完了したことを前提としたコード作成の最も簡単なサーバです.
const express = require('express')
const app = express()
const port = 3000

const allMessages = [];
//클라이언트에서 보내는 메시지를 담을 수 있는 배열
app.use(express.json());
//bodyparser 대신 바디를 받아올 수 있는 미들웨어

app.get('/messages', (req, res) => {
  res.status = 200;  
  res.json({
      results: allMessages
  });
  // 객체의 형태로 존재하는 results에 모든 메시지를 배열의 형태로 담는다.
  // res.send대신 Res.json({});으로 파싱 가능한 JSON 문자열을 받을 수 있다.
  // 이 때, res.send와 res.json을 사용할 경우 res.end는 생략 가능
}) 

app.post('/messages', (req, res) => {
    allMessages.push(req.body);
    //post시 req.body를 push한다.
    res.status(201); //성공시 반환
    res.end('post: Hello World!') //성공시 반환
  })

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`)
})

module.exports = app;

ミドルウェアとは?


ベルトコンベヤーの要求に何かのアクセサリーを貼って不良品であれば、外に出す役割を果たすそうです.ミドルウェアは主に:Nodeに使用されます.jsのみで実現する場合、ミドルウェアにより煩雑なタスクを簡単に解決できます.

1.すべてのリクエストのurlまたはメソッドを理解する


最も簡単な中装はloggerです.名前の通り、ログ・レコードは、サーバのデバッグまたは管理を支援するために使用されます.ロゴを適当に撮る役割を果たすミドルウェアには、次の構成があります.
app.use((req,res,next) => {
  console.log(`${req.url} ${req.method} 로그찍는 미들웨어`);
  // 로그 찍는 미들웨어
  next();
  // 컨베이어 벨트에서 검수가 끝나면 다음으로 보내주는 역할
})

2.POST要求等に用いるbody(負荷)を容易に取得したい場合

app.use(express.json());
// Express 코드 상단에 작성한다.
//바디를 받아올 때 미들웨어를 사용하여 bodyparser를 사용해야하나
//최신의 문법에는 이것이 이미 내장되어 있어 코드가 한결 간편해짐

//POST 요청과 같이 바디가 필요한 곳에 코드를 작성하면 된다. 
console.log(req.body)

3.すべての要求/応答にCORSヘッダを付けた場合


前の純ノードCORSヘッダをjsコードで貼り付ける場合は、応答オブジェクトのwriteHeadメソッドなどを使用してアクセス制御Allow-*ヘッダを1つずつ定義し、OPTIONSメソッドのルーティングを実現する必要があります.
const defaultCorsHeader = {
  'Access-Control-Allow-Origin': '*',
  'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
  'Access-Control-Allow-Headers': 'Content-Type, Accept',
  'Access-Control-Max-Age': 10
};

if (req.method === 'OPTIONS') {
  res.writeHead(201, defaultCorsHeader);
  res.end()
}
COSミドルウェアにより、コードが簡単になります.
const cors = require('cors')

app.use(cors()) // 모든 요청에 대해 CORS 허용
const cors = require('cors')

// 특정 요청에 대해 CORS 허용
app.get('/products/:id', cors(), function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for a Single Route'})
})

4.要求ヘッダーにユーザー認証情報が含まれているかどうかを確認したい場合


HTTPリクエストはトークン(主にユーザ認証用)が成功したか否かを判断し、ユーザがログインしている場合はエラーのミドルウェアを送信する.
app.use((req, res, next) => {
  // 토큰 여부 확인
  if(req.headers.token){
    req.isLoggedIn = true;
    next()
  } else {
    res.status(400).send('invalid user')
  }
})

node.jsデバッグ

$ node –inspect-brk server.js