Node.js從入門到放棄(三)

Node.js從入門到放棄(三)

前言

這是該系列文章的第三篇,主要介紹npm和express框架的應用(下一篇使用express做一個完整的案例)

npm

小demo直接用幾個js文件可以搞定,但是項目級別的目錄還是需要有規範的,也基本上都需要安裝第三方包,npm就是這樣一個包管理器。

  • 新建一個英文命名的文件夾,進入後,在終端運行npm init -y 進行項目初始化

  • 全局安裝依賴 npm i -g 包名

  • 安裝開發依賴 npm i -D 包名

  • 安裝生產依賴 npm i -S 包名

  • 卸載依賴包 npm uninstall 包名

  • npm update升級依賴包版本

  • npm list查看依賴的當前版本

  • npm search查找包含該字符串的依賴包

express

express 是一個前幾年比較流行的Node.js框架,現在逐步被koa2,egg取代,但還是有必要學習一下的。koa2基於express封裝,egg基於koa2封裝。官網:http://expressjs.com/

基本使用

上文用原生http模塊搭建的服務器,這次用express,它內置路由,比原生更強大.但有一點,默認不支持post請求,需要依賴第三方插件(body-parser,formidable…)

// 1. 引包
var express = require('express')
//獲取服務器對象
var app = express()

//設置路由,訪問首頁顯示 hello express
app.get('/',function(req,res){
   res.send('hello express');
})

app.get('/about', function (req, res) {
  // 在 Express 中可以直接 req.query 來獲取查詢字符串參數
  res.send(req.query)
})

//設置監聽
app.listen(3000,function(){
    console.log('run server___');
})

靜態資源開放

有些時候,服務器上的靜態資源我們允許直接訪問(如css,js,img)

    var express = require('express');
    var app = express();
        //開放靜態資源 如原始路徑爲/public/1.jpg 現在可以/1.jpg 訪問 ,少了一層目錄
    app.use(express.static('public'))
    app.listen(3000, function() {
        console.log('run server__')
    })

404攔截處理

express 對於沒有設定的請求路徑,默認會返回 Cat not get xxx,如果你想要定製這個 404,需要通過中間件來配置.

// 寫在最後一個路由後邊
app.use(function (req, res) {
  // 所有未處理的請求路徑都會跑到這裏
  // do something
}

處理post請求

下面用兩個完整的示例,介紹express+中間件處理post請求的過程

  • Node.js開發顯示界面一般放在views文件夾內,這是路由渲染時候的默認查找
  • 未必是html,看模板引擎而定,ejs模板引擎用的就是xxx.ejs

step 1–安裝依賴

  • npm i express
  • npm i body-parser //處理post請求
  • npm i formidable //處理post請求,也可以處理上傳 和 body-parser 二選一就好
  • npm i art-template //模板引擎
  • npm i express-art-template //與express結合的模板引擎

step 2 --配置body-parser和模板引擎

// 1. 引包
var express = require('express')
var bodyParser = require('body-parser')

//獲取服務器對象
var app = express()

//配置bodyParser
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

//整合模板引擎
app.engine('html', require('express-art-template'))

app.get('/', function (req, res) {
  res.render('form.html');
})

//處理表單的post請求,req.body用來接收數據
app.post('/post', function (req, res) {
     res.send(req.body);
})

//設置監聽
app.listen(3000,function(){
  console.log('run server___');
})

step 3 --編寫form.html代碼

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>title</title>
</head>
<body>
    <form action="/post" method="post">

        <p>姓名<input type="text" name="name"></p>
        <p>年齡<input type="text" name="age"></p>
        <p><input type="submit"></p>

    </form>
</body>
</html>

使用formidable替代body-parser

// 1. 引包
var express = require('express')
var formidable = require('formidable');


//獲取服務器對象
var app = express()

//整合模板引擎
app.engine('html', require('express-art-template'))

app.get('/', function (req, res) {
      res.render('form.html');
})

app.post('/post', function (req, res) {
 var form = new formidable.IncomingForm();

//可以自己打印看看回調函數裏邊三個參數是什麼

 form.parse(req, function (err, fields, files) {
  res.send(fields);
 })
})

//設置監聽
app.listen(3000, function () {
     console.log('run server___')
})

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章