前言
Express
是基于Node.js
平台的一个快速的Web
开发框架。
在NPM
官网中我们可以看周下载量达到了一千多万,说着这个后台框架是深受开发者的喜爱的。
下载 Express
npm install express --save
npm
下载掉包的时候可以尝试淘宝cnpm
下载,使用淘宝cnpm
时无法写入配置,所以建议无论是npm
还是cnpm
在下载包的时候都要加上--save
保存配置项。
创建服务
const express = require('express')
const app = express()
app.get('/', function(req, res) {
res.send('Hello World')
})
app.listen(3000)
通过引入express
后可以直接就可以创建服务,端口号为3000
,浏览器访问localhost:3000
即可访问到服务器返回的数据"Hello World"
web层
const express = require('express')
const app = express()
app.use(express.static("./pages"));
app.listen(3000)
之前我们使用http
的时候我们每一个页面都需要写一个请求,这样的做法造成代码臃肿杂乱,而在express
中web
层服务层分离,这为我们节约了大量的代码。
服务层
GET和POST请求
app.get('/GET', function(req, res) {
res.send('这是一个GET请求')
})
app.post("/POST",(req,res) => {
res.send("这是一个POST请求")
})
在express
中封装了get
请求和post
请求的方法,直接调用即可。
路由设置
app.get('/test1', function(req, res) {
res.send('这是第一个GET请求')
})
app.get('/test2', function(req, res) {
res.send('这是第二个GET请求')
})
路由是根据请求的地址决定他要做什么,当我们在浏览器输入localhost:3000/test1
时会返回"这是第一个GET
请求",当输入localhost:3000/test2
时会返回"这是第二个GET
请求",这就是路由。
路由参数
app.get(/^\/student\/([\d]{10})$/, (req, res) => {
res.send(`学生信息,学号${req.params[0]}`)
})
路由可以是一个正则表达式,只要满足这个正则条件就会进入这个路由。
使用圆括号匹配的参数被记录在req.params
中。
路由变量
app.get("/student/:xh", (req, res) => {
res.send(`学生信息,学号${req.params.xh}`)
})
通过:变量名
我们也可以获取路由的变量,同样也被记录在req.params
中。
中间件
app.get("/:username/:id", (req, res) => {
res.send(req.params.username)
})
app.get("/admin/login", (req, res) => {
res.send("管理员登录")
})
上面这种情况我们发现当我们请求内容为"/admin/login
“时他会进入”/:username/:id
"的路由,我们如果想要解决这个问题有两种方案。
1、交换位置
app.get("/admin/login", (req, res) => {
res.send("管理员登录")
})
app.get("/:username/:id", (req, res) => {
res.send(req.params.username)
})
2、使用中间件
app.get("/:username/:id", (req, res, next) => {
next()
})
app.get("/admin/login", (req, res) => {
res.send("管理员登录")
})
node.js
是ECMAScript
的分支,所以他的语法也是从上至下依次执行,我们可以通过交换位置实现,当然我们还可以通过通过中间件来解决这一个问题,但是使用了中间件以后就不能去使用响应结束了,中间件就相当于一个水阀,允许水继续的往下流动。
使用请求
app.use("/", (req, res, next) => {
console.log(req.url);
console.log(new Date());
// 读文件,写文件 放到一个文件中,日志文件
next()
})
use
函数就是可以使用任意的一个请求,通过与中间件使用,可以实现日志文件的功能。
请求参数
GET参数
app.get('/login', (req, res) => {
console.log(req.query)
res.end('ok')
})
express
中GET
请求帮我们记录了请求了参数在query
对象中。
POST参数
const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: false }))
app.post("/login", (req, res) => {
console.log(req.body)
res.send("OK")
})
npm install body-parser
body-parser
的作用是对post
请求的请求体进行解析,结果保存在请求的body
对象中。