nodejs第三者モジュールexpressフレーム


Express
Expressフレーム
  • は、Node.jsプラットフォームに基づいて、高速、開放、極めて簡単なウェブ開発フレーム
  • を有する.
  • express公式サイト
  • express中国語ネット
  • スタートをきる
  • インストール:npm i express
  • //    express
    var express = require('express')
    //    express  ,      express   
    var app = express()
    
    //   
    app.get('/', function (req, res) {
      res.send('Hello World!')
    })
    
    //      
    app.listen(3000, function () {
      console.log('      ')
    })
    APIの説明
  • express():Expressアプリケーションを作成し、戻ります.すなわち、ap
  • app.get():1つのGETタイプのルーティングを登録する――注意:ルーティングが登録されている限り、すべての要求は処理される(構成されていない要求パス、応答404)
  • .
  • res.send():データをクライアントに送信し、自動的にContent-Type
  • を設定する.
            -- パラメータは、文字列、配列、オブジェクト、Bufferとすることができます.
            -- 注意:一回しか使えません.
  • reqおよびres:httpモジュールの役割と同じで、拡張された要求および応答オブジェクト
  • である.
    登録ルート
  • 1 app.METHOD:例えば、ap.get/ap.post/ap.delete/ap.patch
  • 3 app.use(path, callback)のより重要な役割はミドルウェア
  • を処理することである.
            -- 注意:pathで始まる要求アドレスであれば、米国で処理することができます.
            -- 注意:任意の要求タイプを処理できます.
            -- 注意:pathパラメータは省略できます.標準値は/です.
    静的サーバを実現
  • req.path:要求経路
  •        -- 例:URLは「example.com/users?sort=desc」であり、pathは「/users」を表しています.
  • res.sendFile()
  • 静的資源を処理する
  • 静的資源:図、CSS、JavaScriptファイルなど
  • はどう処理しますか?express.static()方法を使用して、静的リソースを管理する
  • .
  • 注意:express.static()は何回も
  • を呼び出すことができます.
    //   web        
    app.use(express.static('web'))
    //    :app.use('/', express.static('web'))
    
    //         
    // http://localhost:3000/anoceanofsky.jpg
    
    //          ,express   web   ,  anoceanofsky.jpg
    //       ,      
    requestの一般的な属性と方法
    //           ,      ---> Get    
    req.query
    
    //   POST    ,    `body-parser`  , POST    
    req.body
  • は、POST要求パラメータ
  • を取得する.
    //   body-parser  
    var bodyParser = require('body-parser');
    //  POST         ,   req.body 
    app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
    
    //   ,      POST     
    console.log(req.body)
    レスポンスの一般的な属性と方法
    // send()         ,     Content-Type
    res.send()
    
    //         ,            Content-Type
    //   :           
    res.sendFile(path.join(__dirname, 'index.html'))
    
    //   HTTP   
    res.sendStatus(200) // equivalent to res.status(200).send('OK')
    
    //      
    res.set('Content-Type', 'text/plain')
    res.set({
      'Content-Type': 'text/plain',
      'cute': 'fangfang'
    })
    
    //    
    res.redirect('/index')
    Expressはテンプレートエンジンを使用します.
    //     html         
    app.engine('html', require('express-art-template'))
    
    //            
    app.set('views', './')
    //            html
    app.set('view engine', 'html')
    
    //    index.html     ,       
    res.render('index', { list: [] })
    Expressにおける外付けルートの使用
  • 目的:ルーティングを独立したルーティングモジュールにパッケージ化することは、コードのパッケージ化とモジュール化に有利である.
    /*
      router.js       :
    */
    
    // 1    express   
    var express = require('express')
    
    // 2    express.Router()   ,          
    var router = express.Router()
    
    // 3   router        
    router.get('/', function (req, res) {
      res.send('hello express')
    })
    router.get('/add', function (req, res) {
    
    })
    
    // 4.   router       
    module.exports = router
    /*
        app.js    :
    */
    var express = require('express')
    
    // 1             
    var router = require('./router')
    
    var app = express()
    
    // 2.          router    app.use()       app    
    //       app          router    
    app.use( router )
    
    app.listen(3000, function () {
      console.log('running...')
    })
    ケース:
    /* 
      express     art-template
        1.     npm i art-template express-art-template
        2.  app       app.engine('html', require('express-art-template'))
        3. res.render(     ,   )
    
        nodejs       
        1.     npm i art-template
        2.     const template = require('art-template')
        3.       const html = template(     ,   )
        4.       res.setHeader('content-type', 'text/html')
        5.    : res.end(html)
    
    
    
    
      body-parser        
        1.     npm i body-parser
        2.     var bodyParser = require('body-parser')
        3.   
        app.use(bodyParser.urlencoded({ extended: true })); //       
        app.use(bodyParser.json());
    */
    //      
    const path = require('path')
    const querystring = require('querystring')
    const moment = require('moment')
    const express = require('express')
    const bodyParser = require('body-parser')
    const app = express()
    
    //  app        
    // art-tempalte:            html       art
    //   1:           
    //   2:    express-art-template         express   
    app.engine('html', require('express-art-template'))
    //              /pages
    app.set('views', 'pages')
    //            html
    // app.set('view engine', 'html')
    
    const dataTool = require('./dataTool')
    
    app.listen(8888, () => {
      console.log('        ')
    })
    
    //       
    //  public            /static         /static
    app.use('/static', express.static('public'))
    
    //       :     post       ,   req.body
    // app.use((req, res, next) => {
    //   // req.body post    
    //   let result = ''
    //   req.on('data', chunk => {
    //     result += chunk
    //   })
    //   req.on('end', () => {
    //     req.body = querystring.parse(result)
    //     next()
    //   })
    // })
    // app.use(bodyParser.json()) //   json  
    app.use(bodyParser.urlencoded({ extended: false })) //       
    
    //     
    app.get('/', (req, res) => {
      //   index.html  
      //   
      //   
      dataTool.readFile(data => {
        // const filePath = path.join(__dirname, 'views', 'index.html')
        //            
        //   1:     
        //        ,        ,        ,
        //         ,         views        
        res.render('index.html', data)
      })
    })
    
    app.get('/index', (req, res) => {
      res.redirect('/')
    })
    
    app.get('/add', (req, res) => {
      res.render('add.html')
    })
    
    app.get('/delete', (req, res) => {
      //    id
      // express   req     req.query(get     )    req.body(post)
      const id = req.query.id
      //     
      dataTool.readFile(data => {
        //   data  id     
        data.total--
        data.list = data.list.filter(item => item.id !== +id)
        //    
        dataTool.writeFile(data, () => {
          //    ,     /
          res.redirect('/')
        })
      })
    })
    
    app.post('/fb', (req, res) => {
      // req.body
      // console.log(req.body)
      // res.send('ok')
      const newData = req.body
      dataTool.readFile(data => {
        data.total++
        data.list.unshift({
          ...newData,
          id: +new Date(),
          time: moment().format('YYYY-MM-DD HH:mm:ss')
        })
    
        dataTool.writeFile(data, () => {
          res.redirect('/')
        })
      })
    })
    
    /* 
      1.    npm i art-template express-art-template
      2.         app.engine('html', require('express-art-template'))
      3.          views  app.set('views', 'pages')
      4.         ,  res.render(    ,   )
    */
    
    //   404
    app.use((req, res) => {
      res.status(404).render('404.html')
    })