前端培訓-中級階段(52)- Express 的安裝、使用 Express 完成 RESTful 操做 MongoDB

前端最基礎的就是 HTML+CSS+Javascript。掌握了這三門技術就算入門,但也僅僅是入門,如今前端開發的定義已經遠遠不止這些。前端小課堂(HTML/CSS/JS),本着提高技術水平,打牢基礎知識的中心思想,咱們開課啦(每週四)。前端

當咱們須要起一個服務器時,我猜大多數人的選擇是 Express (至少我看到的一些小工具是)。mongodb

今天咱們來安裝一下,而後結合上節課操做一下 MongoDBexpress

Express

安裝

npm install express --save

依賴仍是蠻好裝的,裝好依賴咱們就能夠啓動咱們的服務了。npm

var express = require('express')
var app = express()

var server = app.listen(8088, () => {
    var host = server.address().address;
    var port = server.address().port;
    console.log('Example app listening at ', host, port);
    console.log('author: lilnong.top');
})

app.use(function(req, res, next){
    res.send('www.lilnong.top')
    next();
})

使用

監聽路由、中間件

中間件,監聽全部請求類型json

app.use(function(req, res, next){
    console.log('use-1', req.ip)
    next();
})

中間件,監聽 /api 下的全部請求類型segmentfault

app.use('/api', function(req, res, next){
    console.log('use-2-/api', req.ip)
    next();
})

監聽 /apiGET 請求類型api

app.get('/api', function(req, res, next){
    console.log('use-2-/api', req.ip)
    next();
})

監聽 /api 下全部請求類型服務器

app.all('/api',function(req, res, next){
    console.log('/api-all', req.ip)
    next();
})

RESTful 實現 CURD

默認 express 是不會解析 post 請求的 body。咱們須要增長一箇中間件微信

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

規範

// GET /task 獲取 task 列表
// GET /task/:id 查看某個具體的 task
// POST /task 新建一個 task
// PUT /task/:id 更新 id 爲 12 的 task
// DELETE /task/:id 刪除 id 爲 12 的 task

實現代碼

const taskrouter = express.Router()
taskrouter.route('/task')
    .post(async (req,res,next) => {
        console.log(req.method, req.url, req.params, req.query, req.body)

        let data = await dbo.collection('user').insert({...req.body,author: 'www.lilnong.top', time: new Date(), uuid: `${Date.now()}-${Math.random()}-${Math.random()}-${Math.random()}`})
        res.send(data)

        
        // fetch(`/restful-api/task`,{
        //     method: 'post',
        //     body: new URLSearchParams({cdate: new Date().toLocaleString()}), 
        // })
        //     .then(v=>v.json())
        //     .then(v=>console.log('post restful-api/task',v))
    })
    .get(async (req,res,next) => {
        console.log(req.method, req.url, req.params, req.query, req.body)

        let data = await dbo.collection('user').find().toArray()
        res.send(data)

        // fetch(`/restful-api/task`)
        //     .then(v=>v.json())
        //     .then(v=>console.log('get restful-api/task',v))
    })
taskrouter.route('/task/:uuid')
    .get(async (req,res,next) => {
        console.log(req.method, req.url, req.params, req.query, req.body)

        let data = await dbo.collection('user').find({uuid: req.params.uuid}).toArray()
        res.send(data)

        
        // fetch(`/restful-api/task/1604050499531-0.7571477556104735-0.2684691266146757-0.455850836469736`)
        //     .then(v=>v.json())
        //     .then(v=>console.log('get restful-api/task/1604050499531-0.7571477556104735-0.2684691266146757-0.455850836469736',v))
    })
    .put(async (req,res,next) => {
        console.log(req.method, req.url, req.params, req.query, req.body)
        
        let data = await dbo.collection('user').updateOne({uuid: req.params.uuid},{$set: {...req.body,utime: new Date()}})
        res.send(data)

        
        // fetch(`/restful-api/task/1604050500761-0.5377497291744571-0.022071316247671557-0.336347246286103`,{
        //     method: 'put',
        //     body: new URLSearchParams({udate: new Date().toLocaleString(), uauthor: 'www.lilnong.top'}), 
        // })
        //     .then(v=>v.json())
        //     .then(v=>console.log('put restful-api/task',v))
    })
    .delete(async (req,res,next) => {
        console.log(req.method, req.url, req.params, req.query, req.body)
        
        let data = await dbo.collection('user').deleteOne({uuid: req.params.uuid})
        res.send(data)

        // fetch(`/restful-api/task/1604050496565-0.660805544561031-0.5097297478722462-0.41065424039611176`,{
        //     method: 'delete',
        // })
        //     .then(v=>v.json())
        //     .then(v=>console.log('delete restful-api/task/1604050496565-0.660805544561031-0.5097297478722462-0.41065424039611176',v))
    })

app.use('/restful-api', taskrouter)

demo 代碼

let dbo
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect(
    'mongodb://localhost:27017/sf-mongodb',
    {},
    async function(err, db){
        if(err){
            reject(err)
            return console.error(err)
        }
        dbo = db.db('sf-mongodb');
        console.log('mongodb-success')
    }
)



var express = require('express')
var app = express()

var server = app.listen(process.env.NODE_EXPRESS_MONGODB || 23456, () => {
    var host = server.address().address;
    var port = server.address().port;
    console.log('Example app listening at ', host, port);
    console.log('author: lilnong.top');
})

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

app.use(function(req, res, next){
    console.log('header', req.ip)
    next();
})

app.use('/api',function(req, res, next){
    console.log('/api', req.ip)
    next();
})
app.get('/api',function(req, res, next){
    console.log('/api-get', req.ip)
    next();
})
app.all('/api',function(req, res, next){
    console.log('/api-all', req.ip)
    next();
})

// GET /task 獲取 task 列表
// GET /task/:id 查看某個具體的 task
// POST /task 新建一個 task
// PUT /task/:id 更新 id 爲 12 的 task
// DELETE /task/:id 刪除 id 爲 12 的 task
const taskrouter = express.Router()
taskrouter.route('/task')
    .post(async (req,res,next) => {
        console.log(req.method, req.url, req.params, req.query, req.body)

        let data = await dbo.collection('user').insert({...req.body,author: 'www.lilnong.top', time: new Date(), uuid: `${Date.now()}-${Math.random()}-${Math.random()}-${Math.random()}`})
        res.send(data)

        
        // fetch(`/restful-api/task`,{
        //     method: 'post',
        //     body: new URLSearchParams({cdate: new Date().toLocaleString()}), 
        // })
        //     .then(v=>v.json())
        //     .then(v=>console.log('post restful-api/task',v))
    })
    .get(async (req,res,next) => {
        console.log(req.method, req.url, req.params, req.query, req.body)

        let data = await dbo.collection('user').find().toArray()
        res.send(data)

        // fetch(`/restful-api/task`)
        //     .then(v=>v.json())
        //     .then(v=>console.log('get restful-api/task',v))
    })
taskrouter.route('/task/:uuid')
    .get(async (req,res,next) => {
        console.log(req.method, req.url, req.params, req.query, req.body)

        let data = await dbo.collection('user').find({uuid: req.params.uuid}).toArray()
        res.send(data)

        
        // fetch(`/restful-api/task/1604050499531-0.7571477556104735-0.2684691266146757-0.455850836469736`)
        //     .then(v=>v.json())
        //     .then(v=>console.log('get restful-api/task/1604050499531-0.7571477556104735-0.2684691266146757-0.455850836469736',v))
    })
    .put(async (req,res,next) => {
        console.log(req.method, req.url, req.params, req.query, req.body)
        
        let data = await dbo.collection('user').updateOne({uuid: req.params.uuid},{$set: {...req.body,utime: new Date()}})
        res.send(data)

        
        // fetch(`/restful-api/task/1604050500761-0.5377497291744571-0.022071316247671557-0.336347246286103`,{
        //     method: 'put',
        //     body: new URLSearchParams({udate: new Date().toLocaleString(), uauthor: 'www.lilnong.top'}), 
        // })
        //     .then(v=>v.json())
        //     .then(v=>console.log('put restful-api/task',v))
    })
    .delete(async (req,res,next) => {
        console.log(req.method, req.url, req.params, req.query, req.body)
        
        let data = await dbo.collection('user').deleteOne({uuid: req.params.uuid})
        res.send(data)

        // fetch(`/restful-api/task/1604050496565-0.660805544561031-0.5097297478722462-0.41065424039611176`,{
        //     method: 'delete',
        // })
        //     .then(v=>v.json())
        //     .then(v=>console.log('delete restful-api/task/1604050496565-0.660805544561031-0.5097297478722462-0.41065424039611176',v))
    })

app.use('/restful-api', taskrouter)



app.use(function(req, res, next){
    console.log('footer', req.ip)
    res.send('www.lilnong.top')
    next();
})

微信公衆號:前端linong

clipboard.png

參考文獻

  1. 前端培訓目錄、前端培訓規劃、前端培訓計劃
相關文章
相關標籤/搜索