4.9-express

express

簡介

web開發框架

下載

npm install express

中間件

中間件方法和請求處理函數

app.get(‘請求路徑’,‘處理函數’)

app.post(‘請求路徑’,‘處理函數’)

// * 表示匹配任何路徑
app.get('*', (req, res, next) => {
  console.log(++i);
  next();
});

app.get('/req1', (req, res) => {
  console.log(2222);
  res.send();
});

處理get請求參數

req.query

const express = require('express');
// 一箇中間件
const bodyParser = require('body-parser');
// 創建網站服務器
const app = express();

app.get('/req1', (req, res) => {
    res.send(req.query.a + "-" + req.query.b);
});

app.listen(7788);
consol ning');

處理post請求參數

使用中間件 body-parser

通過req.body

const express = require('express');
// 一箇中間件
const bodyParser = require('body-parser');
// 創建網站服務器
const app = express();
// querystring "a=10&b=20"--->{a:10,b:20} 
// 使用中間件,任何請求都會先走它,會處理post請求
// 參數爲true使用第三方模塊qs, false用的是nodejs中querystring
app.use(bodyParser.urlencoded({ extended: true }));

app.post('/post', (req, res) => {
    console.log(req.body);
    res.send(req.body);
});

app.listen(7788);
console.log('app is running');

postman 模擬各種請求

中間件app.use()

基礎認識:

const express = require('express');
let app = express();

// 中間件 app.use() 不傳參數匹配所有請求方式
app.use('/index', (req, res, next) => {
    console.log(111);
    next();
});

app.get('/req', (req, res) => {
    res.send('req');
});

app.listen(7788);
app.use()基礎應用
const express = require('express');
// 創建網站服務器
const app = express();

// app.use((req, res, next) => {
//     res.send('公司網站正在維護,請於明日早八點後訪問');
// });

app.use('/index', (req, res, next) => {
    let isLogin = true;
    if (isLogin) {
        next();
    } else {
        res.send('請登錄後訪問主頁');
    }
});

app.get('/index', (req, res) => {
    res.send('Hello World');
});

app.use((req, res, next) => {
    res.send('您訪問的資源不存在');
});


app.listen(7788);
console.log('app is running');
使用app.use()處理錯誤
const express = require('express');
const fs = require('fs');
// 創建網站服務器
const app = express();


app.get('/index', (req, res, next) => {
    //throw new Error('something is wrong');
    //console.log(111);
    //next();
    fs.readFile('./21.js', 'utf8', (err, data) => {
        if (err != null) {
            next(err);
        } else {
            res.send(data);
        }
    });
});

// 處理錯誤中間件  前面有拋錯或者next()傳參數下面就會被執行
app.use((err, req, res, next) => {
    console.log(333);
    res.status(500).send('服務器內部發生未知錯誤');
});

app.listen(7788);
console.log('app is running');

例二

const express = require('express');
const fs = require('fs');
const readFile = require('util').promisify(fs.readFile); // 將異步代碼 轉換爲promise
const app = express();


app.get('/admin', async (req, res, next) => {
    try {
        let result = await readFile('./1.js');
        console.log(result.toString());
    } catch (err) {
        next(err);
    }
});

app.use((err, req, res, next) => {
    res.status(500).send(err.message);
})
app.listen(7788);

路由

可以實現類似

localhost:9999/static/index.html

ocalhost:9999/static/news.html

const express = require('express');

const app = express();

// 創建路由對象
const home = express.Router();

//  相當於一級路由
home.get('/', (req, res) => {
    res.send('wel');
});

// /home/index  二級路由
home.get('/index', (req, res) => {
    res.send('welcome');
});

app.use('/home', home);  // 給路由對象匹配路徑

app.listen(9999);
const express = require('express');
const app = express();

// /user/.. 都能夠匹配
app.get('/user/:id', (req, res) => {
    res.send(req.params);  // {"id":":99"}
    // http://localhost:9999/user/99
});

app.listen(9999);

express.static()

可以託管靜態文件

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

// 此文件同路徑下有個public文件夾 用於存在靜態文件

// app.use(express.static(__dirname + '/public'));  //設置靜態文件目錄 參數爲路徑
// localhost:9999/index.html

app.use('/static', express.static(path.join(__dirname, 'public')));  //設置靜態文件目錄 參數爲路徑
// localhost:9999/static/index.html

app.listen(9999);

express && template

需要兩個工具 express-art-template && art-template

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

// 配置模板引擎
app.engine('art', require('express-art-template'));

// 設置模板存放的目錄  此文件同路徑下有個views文件夾,存放模板
app.set('views', path.join(__dirname, 'views'));

// 設置默認的模板擴展名
app.set('view engine', 'art');   // 公共模板數據

app.locals.msg = 'helloword';
app.get('/index', (req, res) =>{
    res.render('index');  // 調用模板
});
app.get('/news', (req, res) =>{
    res.render('news');
});

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