什麼是express?
基于 Node.js 平台,快速、開放、極簡的 Web 開發架構。
具體可以參考:
Express中文網
https://blog.csdn.net/qq_45268602/article/details/109150525
如何使用?
可以參考:
https://www.expressjs.com.cn/starter/hello-world.html
- 安裝express
npm install express
- 引入express
- app執行個體對象
- app.請求方式
- app.get(請求路徑,回調函數)
- app.post(請求路徑,回調函數)
- app.all(請求路徑,回調函數)
- 監聽端口
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 裡面的變量或者資料放置在外部的頁面裡面。
- 我們外置的頁面一般我們叫做模闆,模闆裡面一般會放置很多的占位符,占位符值得是後面可以通過變量替換出來的。
- 使用模闆引擎,把那些占位符通過變量替換出來。
使用示例
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() 查詢表中有多少條資料