前端培训-中级阶段(52)- Express安装,使用 Express完成RESTful操作 MongoDB

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 前端最基础的就是 HTML+CSS+Javascript。掌握了这三门技术就算入门,但也仅仅是入门,现在前端开发的定义已经远远不止这些。前端小课堂(HTML/CSS/JS),本着提升技术水平,打牢基础知识的中心思想,我们开课啦(每周四)。当我们需要起一个服务器时,我猜大多数人的选择是 Express (至少我看到的一些小工具是)。今天我们来安装一下,然后结合上节课操作一下 MongoDB 。

Express



安装


npm install express --save

依赖还是蛮好装的,装好依赖我们就可以启动我们的服务了。


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();
})


使用


监听路由、中间件


中间件,监听所有请求类型


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


中间件,监听 /api 下的所有请求类型


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


监听 /apiGET 请求类型


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();
})


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
2月前
|
前端开发 关系型数据库 MySQL
【前端学java】MySQL数据库的本地安装
【8月更文挑战第12天】MySQL数据库的本地安装
39 3
|
3月前
|
NoSQL MongoDB Python
【Python】已完美解决(MongoDB安装报错)Service ‘MongoDB Server (MongoDB)’ (MongoDB) failed tostart
【Python】已完美解决(MongoDB安装报错)Service ‘MongoDB Server (MongoDB)’ (MongoDB) failed tostart
115 1
|
3天前
|
存储 NoSQL 前端开发
前端轻量级数据库mongodb
【10月更文挑战第2天】MongoDB 是一个基于分布式文件存储的开源数据库系统,不属于前端轻量级数据库,而是后端数据库。它使用 BSON 格式存储数据,支持复杂的数据结构,适用于内容管理系统、物联网等领域。MongoDB 通过动态模式和面向对象的数据存储方式,提供了灵活的数据模型。在 Web 应用中,它通常作为后端存储,通过 API 与前端交互,实现高效的数据管理和实时更新。
|
23天前
|
前端开发 JavaScript 开发者
Express.js与前端框架的集成:React、Vue和Angular的示例与技巧
本文介绍了如何将简洁灵活的Node.js后端框架Express.js与三大流行前端框架——React、Vue及Angular进行集成,以提升开发效率与代码可维护性。文中提供了详细的示例代码和实用技巧,展示了如何利用Express.js处理路由和静态文件服务,同时在React、Vue和Angular中构建用户界面,帮助开发者快速掌握前后端分离的开发方法,实现高效、灵活的Web应用构建。
37 3
|
2月前
|
前端开发 Java Maven
【前端学java】全网最详细的maven安装与IDEA集成教程!
【8月更文挑战第12天】全网最详细的maven安装与IDEA集成教程!
71 2
【前端学java】全网最详细的maven安装与IDEA集成教程!
|
2月前
|
前端开发 Oracle Java
【前端学java】java开发的依赖安装与环境配置(1)
【8月更文挑战第8天】java开发的依赖安装与环境配置
36 1
【前端学java】java开发的依赖安装与环境配置(1)
|
2月前
|
JavaScript NoSQL 前端开发
|
2月前
|
NoSQL Ubuntu MongoDB
在Ubuntu 16.04上安装和保护MongoDB的方法
在Ubuntu 16.04上安装和保护MongoDB的方法
22 1
|
2月前
|
JSON 前端开发 应用服务中间件
韬光敛彩:用 nginx + express 无痛实现前端项目本地 mock
韬光敛彩:用 nginx + express 无痛实现前端项目本地 mock
|
2月前
|
前端开发 小程序 Unix
Centos安装前端开发常用软件
Centos安装前端开发常用软件
下一篇
无影云桌面