天天看點

Node.js學習筆記(二)——express

什麼是express?

基于 Node.js 平台,快速、開放、極簡的 Web 開發架構。

具體可以參考:

Express中文網

https://blog.csdn.net/qq_45268602/article/details/109150525

如何使用?

可以參考:

https://www.expressjs.com.cn/starter/hello-world.html

  1. 安裝express
npm install express
           
  1. 引入express
  1. app執行個體對象
  1. app.請求方式
  • app.get(請求路徑,回調函數)
  • app.post(請求路徑,回調函數)
  • app.all(請求路徑,回調函數)
  1. 監聽端口
const port = 3000; // 端口
app.listen(port, () => {}) // app.listen(端口, 回調函數)
           

express之路由

可以參考:

https://www.expressjs.com.cn/starter/basic-routing.html

https://www.expressjs.com.cn/guide/routing.html

路由 是指确定應用程式如何響應用戶端對特定端點的請求,該特定端點是URI(或路徑)和特定的HTTP請求方法(GET,POST等)。

而這樣的操作需要事先在背景定義好規則,定義出來的規則我們叫做 路由規則。

路由基本文法

  • 普通文法

    app.HTTP請求類型(請求路徑,回調函數)

發送  GET請求:app.get(請求路徑,回調函數)

發送  POST請求:app.post(請求路徑,回調函數)

發送  任意請求:app.all(請求路徑,回調函數)
           
  • 特殊文法

    app.use(請求路徑,回調函數)

    • 差別1:use比對任意類型請求
    • 差別2:use非完全比對(隻需要url前面比對請求路徑即可比對)

路由參數擷取

// :id 一般我們稱之為 占位符,也叫做路由參數,代表這個是可變
// :type 一般我們稱之為 占位符,也叫做路由參數,代表這個是可變
app.get('/news/:id/:type', (req, res) => {
    console.log(req.params); // 包含了請求的路由參數
    let id = req.params.id; 
    let type = req.params.type;
    res.send('Hello news  ' + id + ' type ' + type);

});
           

利用 Express 托管靜态檔案

可以參考:

https://www.expressjs.com.cn/starter/static-files.html

express.static()

Express架構中設定了固定文法允許指定目錄下的檔案被外部通路。

var express = require('express')
var app = express()
app.use('/public', express.static('public'));
           

模闆引擎art-template

模闆引擎可以把我們的 js 裡面的變量或者資料放置在外部的頁面裡面。

  1. 我們外置的頁面一般我們叫做模闆,模闆裡面一般會放置很多的占位符,占位符值得是後面可以通過變量替換出來的。
  2. 使用模闆引擎,把那些占位符通過變量替換出來。

使用示例

html代碼:

<!DOCTYPE html>
<html lang="zh_CN">
<head>
    <meta charset="UTF-8">
    <title>搜尋表單</title>
</head>
<body>
<form action="" method="get">
    <input type="text" name="kw">
    <input type="submit" value="送出">
</form>
<!-- {{ kw }} 形如這樣的結構叫做占位符,也可以叫做插值表達式 -->
<p>使用者搜尋的關鍵字:<b>{{ kw }}</b></p>
<hr>
</body>
</html>
           

js代碼:

const express = require('express');
const url = require('url');
const path = require('path');
const template = require('art-template');

const app = express();
const port = 3000;

app.get('/search', (req, res) => {
    // 擷取使用者輸入的資訊
    let kw = req.query.kw;
    let absPath = path.resolve(__dirname, './views/search.html');
    let htmlContent = template(absPath, {kw});
    res.send(htmlContent);
})

app.listen(port, () => {
    console.log("server is run at port " + port);
})
           

模闆引擎express-art-template

使用示例

html代碼:

<!DOCTYPE html>
<html lang="zh_CN">
<head>
    <meta charset="UTF-8">
    <title>搜尋表單</title>
</head>
<body>
<form action="" method="get">
    <input type="text" name="kw">
    <input type="submit" value="送出">
</form>
<!-- {{ kw }} 形如這樣的結構叫做占位符,也可以叫做插值表達式 -->
<p>使用者搜尋的關鍵字:<b>{{ kw }}</b></p>
<hr>
</body>
</html>
           

js代碼:

const express = require('express');
const path = require('path');

const app = express();
const port = 3000;

// 靜态資源
app.use(express.static('public'));

// 1. 代表我們現在的項目要有 art-template 模闆引擎
// 注意:我們在使用時可能在檔案中隻引用express-art-template,但是我們也需要安裝art-template,因為express-art-template需要依賴art-template
app.engine('html', require('express-art-template'));
// 2. 設定 運作模式 debug 調試  production 生成模式 development 開發模式
app.set('view options', {
    debug: process.env.NODE_ENV !== 'production'
});
// 3. 設定模闆的目錄
app.set('views', path.join(__dirname, 'views'));
// 4. 使用模闆 art-template
app.set('view engine', 'html');

app.get('/search', (req, res) => {
    // 擷取使用者輸入的資訊
    let kw = req.query.kw;
    // render 第一個參數是帶渲染的模闆,第二個參數就是模闆要使用的變量
    res.render('search', {kw});
})

app.listen(port, () => {
    console.log("server is run at port " + port);
})
           

Mongoose的使用

使用mongoose這個第三方庫來實作mongodb的操作

可以參考:

http://www.mongoosejs.net/

簡單示例

首先要安裝mongoose

npm  install mongoose
           
// 1、引入mongoose
const mongoose = require('mongoose');
// 2、連接配接資料庫
mongoose.connect('mongodb://localhost/test');
// 3、定義資料模型,參數一表示表名稱,參數二表示字段
// 傳回值相當于一個構造函數,可以執行個體化對象,執行個體化出來的對象代表表中的一條記錄
const Cat = mongoose.model('Cat', { name: String });
// 4、執行個體化
const kitty = new Cat({ name: 'Zildjian' });
// 5、插入資料
kitty.save().then(() => {console.log('成功插入!')});
           

mongodb常用指令

    • db.表名.save({字段})
    • db.表名.remove({}) 删除所有
    • db.表名.remove({字段}) 删除指定字段
    • db.表名.update({字段},{$set:{字段}})
    • db.表名.update({字段},{$inc:{字段(數字)}})
    • db.表名.find() 查找所有資料
    • db.表名.find({age:19}) 查找指定字段
    • db.表名.find({age:{$gt:22}}) 大于22的資料
    • db.表名.find({age:{$lt:22}}) 小于22的資料
    • db.表名.find({age:{$gte:22}}) 大于等于22的資料
    • db.表名.find({age:{$lte:22}) 小于等于22的資料
    • db.表名.find({age:{ g t e : 30 , gte:30, gte:30,lte:22})大于等于30小于等于22的資料
    • db.表名.find({name:/alley/}) 模糊查詢 找到資料中有alley的資料
    • db.表名.find({age:/^alley/}) 查找首字元是alley
    • db.表名.find({age:/alley$/}) 查找尾字元是alley
    • db.表名.find({},{name:1,_id:0}) 隻顯示name這個字段
    • db.表名.find().sort({age:1}) 正序
    • db.表名.find().sort({age-1}) 降序
    • db.表名.find().limit(n) 顯示多少條資料
    • db.表名.find().skip(n) 跳過多少條資料
    • db.表名.find().skip(n).limit(m) 跳過多少條 顯示多少條
    • db.表名.findOne({}) 查找一條資料
    • db.表名.find().count() 查詢表中有多少條資料