[Node.js] Express
Express
ExpressはNodeです.これは、jsの開発をより迅速に行うためのWebフレームワークです.
expressを使用せず、HTTP内蔵モジュールのみを使用してWebサーバを作成します.const http = require('http');
http.createServer((request, respone) => {
response.writeHead(200, {'Content-Type' : 'text/html'});
response.write('Hello !')
response.end()
}).listen(8000)
こうなります.
ただし、expressを使用すると、コードがより簡潔になります.const express = require('express');
const app = express;
app.length('/', (req, res) => {
res.send('Hello!')
})
app.listen(port)
コードがこんなに簡潔なのは、Expressが所有するミドルウェアとルータのためです.
ミドルウェアとルータを見てみましょう.
1.ミドルウェアとは?
正式なドキュメントでは、要求オブジェクト、応答オブジェクト、およびアプリケーション要求-応答ライフサイクルの次のミドルウェア関数をアクセス権のある関数として定義します.
ミドルウェアは、サーバが受信要求と送信応答の間で何らかの操作を実行するプログラムである.(2つのHTTPパケット転送間で発生した事象を実行)
次の操作を行います.
const http = require('http');
http.createServer((request, respone) => {
response.writeHead(200, {'Content-Type' : 'text/html'});
response.write('Hello !')
response.end()
}).listen(8000)
const express = require('express');
const app = express;
app.length('/', (req, res) => {
res.send('Hello!')
})
app.listen(port)
ミドルウェア使用時
const express = require('express');
const app = express();
const myLogger = function (req, res, next) {
next(); // 다음 미들웨어를 실행, 미들웨어를 통해 데이터를 전달합니다.
};
app.use(myLogger);
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(3000);
expressを使用しない場合、bodyを得るために、
let body = [];
request.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString();
// body 변수에는 문자열 형태로 payload가 담겨져 있습니다.
});
私はこのような形で受け取るべきです.しかし、body-parserミドルウェアは、このプロセスを簡略化することができる.
const bodyparser = require('body-parser')
const jsonparser = bodyParser.json()
app.post('/api/users', jsonparser, function(req, res) {})
expressを無効にする場合は、各タイトルを再定義し、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()
}
Corsモジュールは操作を簡略化した.
const cors = require('cors')
app.get('/products/:id', cors(), function (req, res, next) {
res.json({msg: 'This is CORS-enabled for a Single Route'})
})
トークン:
app.use((req, res, next) => {
if(req.headers.token){ //token이 있는지 없는 지 확인
req.isLoggedIn = true;
next()
} else {
res.status(400).send('invalid user')
}
})
use() , next()
ミドルウェアを登録する場合はuse()メソッドを使用して登録でき、複数のミドルウェアが登録されている場合はnext()メソッドを呼び出して次のミドルウェアに渡して処理できます.
()何もない場合は、次のミドルウェアに移動してください.
const express = require('express')
const app = express()
let myLogger = function (req ,res, next) { //미들웨어를 등록합니다.
console.log('next')
next()
}
app.use(myLogger) //미들웨어 함수 사용합니다.
app.get('/', function(req, res) { // 라우팅 등록
res.send('Hello world')
}).listen(3000)
種類
ルーティングとは?
ルーティングとは、アプリケーションがクライアント要求にどのように応答するかを決定する特定のエンドポイント、例えばURIおよび特定のHTTP要求方法(GET、POSTなど)を指す.
app.METHOD(PATH, HANDLER)
const express = require('express')
const app = express()
app.get('/', function(req, res) { //GET 메소드, '/' 라우터 등록
res.send('hello world')
})
//app.get()은 get경로('/')가 있는 HTTP 요청이 있을 때마다 호출될 콜백 함수를 지정
app.post('/', function(req, res) {
res.send('hello world')
})
3.Expressミドルウェアタイプ
(1)アプリケーションレベルミドルウェア
appオブジェクトのapp.use()またはapp.METHOD()関数を使用して、appインスタンスのミドルウェアにミドルウェアをバインドします.
app.get('/pages/:id', (req, res, next) => {
//pages id가 0이면 'regular'가 아닌 'special'로 넘어감
if (req.params.id == 0) next('route');
//pages id가 0이 아니라면 'regular'로 넘어감
else next();
}, (req, res, next) => {
res.send('regular');
}
});
//pages id가 0일 때 넘어올 미들웨어
app.get('/pages/:id', (req, res, next) => {
res.send('special');
}
(2)ルータレベルミドルウェア
express.ルータ()オブジェクトを使用して、ミドルウェアをルータインスタンスにバインドします.
//app.js
const express = require('express');
const app = express();
const pageRouter = ('./routes/pages');
app.use('/pages', pageRouter);
//pages.js
const express = require('express');
const router = express.Router();
router.get('/pages/:id', (req, res, next) => {
//pages id가 0이면 'regular'가 아닌 'special'로 넘어감
if (req.params.id == 0) next('route');
//pages id가 0이 아니라면 'regular'로 넘어감
else next();
}, (req, res, next) => {
res.send('regular');
}
});
//pages id가 0일 때 넘어올 미들웨어
router.get('/pages/:id', (req, res, next) => {
res.send('special');
}
module.exports = router;
(3)エラー処理ミドルウェア
エラー処理を担当するミドルウェアは、エラーを担当するミドルウェアであることを識別するために4つのパラメータを受け入れなければならない.
app.use(function (err, req, res, next) {
res.status(400).send('err')
})
(4)サードパーティミドルウェア
デフォルトで提供されるBuilt-inミドルウェアに加えて、インストールと使用が必要な他のミドルウェアをThird-partyミドルウェアと呼びます.
これらのモジュールにはヘルメットとクッキー解析器が含まれています.
Reference
この問題について([Node.js] Express), 我々は、より多くの情報をここで見つけました https://velog.io/@tastestar/Node.js-Expressテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol