文章目录
express
基于Nodejs Web 的开发框架(老框架了 目前无人维护)
express 入门
-
创建一个空的文件夹,作为项目
-
初始化这个项目 npm init -y (生成版本库)
-
安装项目的依赖模块 npm install --save express
-
git管理
-
在项目目录下创建一个 server.js 作为项目的入口文件(启动文件)
-
在入口文件中写代码
-
设置npm脚本,并启动。package.json -> scripts ->编辑key:value(要运行的代码) -> 启动:npm run key(key脚本名为start时run可忽略)
基于express快速搭建 后台服务
-
引入express模块
-
调用express方法,生成express实例对象
-
设置路由,来响应不同的url地址请求
路由:一个url地址对应一个不同的路由处理程序(不同的url地址有不同的回调函数去响应)
-
监听端口号
const express = require('express'); //1
const server = express(); //2
server.get('/',(req,res) => { //3
res.send('express 搭建后台服务');
});
server.listen(3000); //4
express 路由
语法:app.methods(path,callback)
- app 是 express 实例对象
- methods 是请求方法 get | post | put | update | delete |…
- path 就是路径(url定值的 pathname ),必须以’/'开头
- callback 回调函数,路由的处理函数
- req
- res (这里的 req res 就是原生nodejs中的 req res。但比原生中要多一些属性方法,是express加上去的)
- next 是一个方法,调用这个方法会让路由继续匹配下一个能匹配上的
重点:
- 路由代码与 http 请求地址的对应关系
// GET http://localhost:3000/
server.get('/',(req,res) => {res.send('hello express') })
// GET http://localhost:3000/abc
server.get('/abc',(req,res) => {res.send('hello abc') })
- 如果有多个相同路径的路由,那么会按照书写顺序执行第一个
// GET http://localhost:3000/
server.get('/a',(req,res) => {res.send('hello') })
// GET http://localhost:3000/abc
server.get('/b',(req,res) => {res.send('world') })
//输出hello
可以让他按照顺序找到写一个匹配的路由 next()
// GET http://localhost:3000/
server.get('/abc',(req,res,next) => {
console.log('hello');
res.send('hello');
next(); //继续往下寻找匹配的路由
})
// GET http://localhost:3000/abc
server.get('/abc',(req,res) => {
console.log('world'); //控制台会输出
res.send('world'); //报错 上面已关闭请求
})
express 中 request(请求) 与 response(响应) (了解这两个对象中被 express 增加的常用属性和方法)
request(请求)
- req.query : 获取get请求传递过来的参数(url的查询参数串)
console.log(req.query); //{ name: 'vvv', age: '12' }
req.body : 获取post请求传递过来的参数
- 需要设置 express.json 和 express.urlencoded 这两个中间件
//设置中间件
server.use(express.json());
server.use(express.urlencoded({extended:true}));
server.post('/',(req,res) => {
console.log(req.body); //{ name: '小荟', year: '3' }
res.send('xiaohui');
});
- req.cookies : 获取浏览器传递过来的Cookies
- 需要使用 cookie-parser 中间件
- 1.安装 cookie-parser npm install --save cookie-parser
- 2.在server.js中 引入cookie-parser模块
- 3.在server.js中 使用cookie-parser
//获取cookie req.cookies
const cookieParser = require('cookie-parser'); //引入模块
server.use(cookieParser()); //设置中间件
server.get('/getcookie',(req,res) => {
console.log(req.cookies);
res.send('cookie获取成功');
});
- req.get() 获取指定的HTTP的请求头
server.get('/',(req,res) => {
console.log(req.get('Host')); //localhost:3000
res.send('获取指定的HTTP请求头');
});
- req.params 获取路由的动态参数parameters (输出对象)
server.get('/:id',(req,res) => { // GET http://localhost:3000/a :id 动态路由参数 可匹配任意 可设置多个
console.log(req.params); //{ id: 'a' }
res.send('req.params 获取路由的动态参数');
});
- req.hostname/req.ip : 获取主机名和IP地址
server.get('/',(req,res) => {
console.log(req.hostname); //localhost
console.log(req.ip); //::1
res.send('req.hostname 获取主机名和IP地址');
});
- req.path : 获取请求路径
server.get('/a',(req,res) => {
console.log(req.path); // /a
res.send('req.path 获取请求路径');
});
- req.protocol : 获取协议类型
response(响应)
- res.cookie(name,value,[option]) : 设置Cookie
//设置cookie
server.get('/setcookie',(req,res) => {
res.cookie('name','女',{ //'name'不能为中文 {}cookie的选项对象 maxAge cookie保存的时间
maxAge : 1000*60*10
});
res.send('cookie设置成功');
});
-
res.clearCookie() : 清除cookie
-
res.set : 设置HTTP响应头,传入object可以一次设置多个头
-
res.status : 设置HTTP状态码
server.get('/',(req,res) => {
res.set({'name':'xiaohui','age':18});
res.status(505).send('res.set 设置HTTP响应头');
});
- res.send() : 传送HTTP响应
- res.redirect : 重定向到明确的路径,需要有明确的HTTP status代码,如果没有,默认status代码为 ‘302’ ‘Found’(页面跳转)
- res.json : 传送JSON响应 :可传送对象 对象可转成json的格式
- res.download() : 传送指定路径的文件
- res.sendFile(path,[option],[fn]) : 通过给定的路径传递文件,通过文件的扩展名设置响应头Content-Type。除非root选项已经在参数options中设置了,path必须是绝对路径
- res.render(view,[locals],[callback]) : 渲染视图模板。渲染一个视图,并把一个HTML字符串发送给客户端,locals是一个对象,其属性定义了视图内的局部变量。callback是一个回调函数,如果提供了,这个方法返回可能的错误信息和渲染字符串。如果有错误,这个方法会使用一个next(err)的内部函数