Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8691

Express事始め

$
0
0

expressをやってみる

expressはnode.jsをいい感じに使えるようにしてくれるフレームワークです。
https://expressjs.com/ja/

hello world

expressはnodeのコアモジュールを拡張しているので、httpモジュールのように書ける。

app.js
constexpress=require('express')constapp=express()app.get('/',(req,res)=>{res.writeHead(200)res.write('Hello,World')res.end()})app.listen(3001)

express独自のメソッドを使用して実装するならば、下記。

app.js
constexpress=require('express')constapp=express()app.get('/',(req,res)=>{res.status(200).send('Hello, world')})app.listen(3001)

上記でlocalhost:3001にアクセスできる。
完結!

ちなみにhttpモジュールではGET/POSTどちらも受け付けていたが、
上記の実装だとGETのみ受け付ける。(後ほど詳しく触れます)

ミドルウェアを利用する

Expressは最低限の機能しか持たないため、ミドルウェアを組み込む事になる。
ミドルウェアを作成するには、下記のようなfunctionを作成する。

・通常の処理

function(req,res,next){// 何かしらの処理next()}

・エラー処理

function(err,req,res,next){// 何かしらの処理  next()}

next()を呼び出すことで、次の制御に移行する。

上記のミドルウェアを利用する場合はuseメソッドを使用する。

constexpress=require('express')constapp=expresss()app.use((req,res,next)=>{})app.listen(3001)

実際に使ってみた例が下記。アクセスしたユーザーエージェントをconsole.log(ターミナル上)で表示してくれる。

app.js
constmiddlewear=require('./module')constexpress=require('express')constapp=express()app.use(middlewear)app.get('/',(req,res)=>{res.status(200).send('Hello, World')})app.listen(3001)
module.js
module.exports=function(req,res,next){constua=req.headers['user-agent']console.log(ua)next()}

ルーティング

app.メソッド(パス, コールバック)で実装する。

メソッド ・・・ GET,POSTなどを小文字で指定する。
パス ・・・URLのパス。正規表現での指定可
コールバック ・・・メソッドやパスが一致した場合に発動するfunctionを指定

名前付きパラメータも利用できる。コロン付きで指定すればOK!

app.get('/post/:id',(req,res)=>{console.log(req.params.id)})

下記実装後、 localhost:3001/post/31にアクセスすると、 ターミナル上に31と表示される。

constexpress=require('express')constapp=express()app.get('/post/:id',(req,res)=>{console.log(req.params.id)res.status(200).send('ok,hello')})app.listen(3001)

/post/:id? というように正規表現を使う事で、
- /post/31
- /post/
- /post
などにも該当させることができる。

/post/:id*であれば
- /post/31
- post/31/plus

などがヒットする。

Custom Matching Parameterというものもある。

/post/:id(\\d+)であれば、数値のみのマッチングのため
/user/123はマッチするが、
/user/abcはヒットしない。

expressは内部でpath-to-regexpというパッケージを使用している為、
そのドキュメントを見れば詳しいことがわかる。
https://www.npmjs.com/package/path-to-regexp

ルーティングのモジュール化

ある程度のアプリの規模になるとルーティングが肥大化するため、モジュール化する。

constrouter=express.Router()

実際の使用例

constrouter=require('express').Router()// ミドルウェア どのルートでも走るrouter.use((req,res,next)=>{console.log('ミドルウェアです')next()})router.get('/',(req,res)=>{res.send('/')console.log('第一ルーティング')})router.get('/about',(req,res)=>{res.send('/about')console.log('第二ルーティング')})module.exports=router

routerはミドルウェアなので、app.useで使用する。

app.js
constexpress=require('express')constapp=exppress()app.use('/user',require('./router/user.js'))app.listen(3001)

/user/にアクセスすると 「第一ルーティング」がconsole.logに出力され、
/user/aboutにアクセスすると「第二ルーティング」がconsole.logに出力される。

【参考サイト】
https://expressjs.com/ja/
https://dev.classmethod.jp/articles/express_router_param_get/
https://qiita.com/kibinag0/items/8936476e99ed50279b83


Viewing all articles
Browse latest Browse all 8691

Trending Articles