版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/funkstill/article/details/85711454
目录
搭建一个 RESTful Web 服务
设计 RESTful 服务时,要想好需要哪些操作,并将它们映射到 Express 里的路由上。就此例而言,需要实现保存文章、获取文章、获取包含所有文章的列表和删除不再需要的文章这几个功能。分别对应下面这些路由:
- POST /articles——创建新文章;
- GET /articles/:id——获取指定文章;
- GET /articles——获取所有文章;
- DELETE /articles/:id——删除指定文章。
新建项目
mkdir listing3_1
cd listing3_1
npm init -fy
npm install --save [email protected]
const express = require('express');
const app = express();
const articles = [{title:'Example'}];
app.set('port',process.env.PORT||3000);
app.get('/articles',(req,res,next)=>{//获取所有文章
res.send(articles);
});
app.post('/articles',(req,res,next)=>{//创建一篇文章
res.send('OK');
});
app.get('/articles/:id',(req,res,next)=>{//获取指定文章
const id = req.params.id;
console.log('Fetching:',id);
res.send(articles[id]);
});
app.delete('/articles/:id',(req,res,next)=>{//删除指定文章
const id = req.params.id;
console.log('Deleting:',id);
delete articles[id];
res.send({message:'Deleted'});
});
app.listen(app.get('port'),()=>{
console.log('App started on port',app.get('port'));
});
module.exports = app;
添加消息解析器
处理 POST 请求需要消息体解析。消息体解析器知道如何接收 MIME-encoded(多用途互联网邮件扩展) POST 请求消息的主体部分,并将其转换成代码可用的数据。一般来说,它给出的是易于处理的 JSON 数据。只要网站上有涉及提交表单的请求,服务器端就肯定会有一个消息体解析器来参与这个请求的处理。
//完成post部分
const express = require('express');
const app = express();
const articles = [{title:'Example'}];
const bodyParser = require('body-parser');
app.set('port',process.env.PORT||3000);
app.use(bodyParser.json());//支持编码为JSON的请求体
app.use(bodyParser.urlencoded({extended:true}));//支持编码为表的请求体
app.get('/articles',(req,res,next)=>{//获取所有文章
res.send(articles);
});
app.post('/articles',(req,res,next)=>{//创建一篇文章
const article = {title:req.body.title};
articles.push(article);
res.send(article);
});
app.get('/articles/:id',(req,res,next)=>{//获取指定文章
const id = req.params.id;
console.log('Fetching:',id);
res.send(articles[id]);
});
app.delete('/articles/:id',(req,res,next)=>{//删除指定文章
const id = req.params.id;
console.log('Deleting:',id);
delete articles[id];
res.send({message:'Deleted'});
});
app.listen(app.get('port'),()=>{
console.log('App started on port',app.get('port'));
});
module.exports = app;