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(); })
监听 /api
下 GET
请求类型
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(); })