Express 常用API
req
- req.query :获取GET请求传递过来的数据{key:val};
- req.body :获取POST请求传递过来的数据{key:val}(但是需要设置中间件函数json与urlencode);
- req.cookie :获取Cookie(需要使用cookie-parse中间件)
- req.hostname / req.ip :获取主机名和IP地址
- req.params: 获取传递过来的数据 req.params.name ;(app.get('/csdn/:name',function(req,res){});)
- req.path ;获取请求路径
- req.protocol ;获取协议类型
- req.get();获取指定的http请求头
res
- res.set();设置HTTP请求头(用在判断是否是手机端)
- res.status();设置HTTP状态码
- res.send();传输HTTP响应
- res.redirect();设置响应的location HTTP头,并且设置状态码302(跟换访问的网页)
- res.json();传输json响应
- res.cookie(name,value,option)设置cookie
- res.clearCookie('name');删除Cookie穿需要删除的
- res.download('文件所在路径');传输指定路径的文件;说白了就是下载文件的后端操作将文件传到指定位置
- res.sendFile('路径');直接显示html,css等文件
- res.render('ejs文件名',{数据},函数);动态渲染
路径处理
两个全局变量
- __dirname 当前文件所在的目录的绝对路径
- __filename 当前文件的绝对路径
NodeJS 内置的 path 模块
- path.resolve(...path)
- path.join(...path)
PS: 这两种的区别
join() 只是简单的对多个路径参数做合并。而 resolve() 中,如果有某个 根路径的参数,这个根路径参数前面的参数将会被忽略掉。
resolve() 总是会返回绝对路径。而join()就得到参数是怎样。
let str1 = path.resolve(__dirname, './express-01', './demo.txt')
let str2 = path.join(__dirname, './express-01/demo.txt')
let str1 = path.join('c:/hello', 'd:/world', './demo.txt')
console.log(str1)
let str2 = path.resolve('c:/hello', 'd:/world', './demo.txt')
console.log(str2)
模板引擎
模板引擎的作用,就是将静态html页面给弄活。访问一个url地址,浏览器渲染出来的是html的内容。但是不是直接输出一个静态的html页面。而是后端在输出之前会将一个静态的html页面模板与数据先拼接。然后再输出。
express中的模板引擎有很多
- EJS (推荐 - 因为这款模块引擎的模板语法跟js一样)
- PUG
- MUSTACHE
- ...
需求
提供一个动态参数的url地址
http://localhost:8080/hello/李威
渲染到浏览器的是一个html页面。这个html中只有一个
欢迎,xxx
- 新创建一个 express-02
- 项目初始化
npm init -y - 安装项目需要的依赖
- express
- ejs
npm install --save express ejs
- 写代码
- 需要通过 express 的实例的 set('view engine', 'xxx') 来设置当前项目使用哪种模板引擎
- 需要通过 express 的实例的 set('views', 'xxx') 来设置当前项目中模板页面的存放路径
- 后续需要渲染模板页面的地方,就可以使用 res.render() 来操作
// 1. 引入 express
const express = require('express')
const path = require('path')
// 2. 创建实例
const server = express()
// 3. 设置项目使用的何种模板引擎与使用那个文件夹作为模板页面的存放路径
server.set('view engine', 'ejs')
server.set('views', path.resolve(__dirname, './views'))
// 3. 处理路由
server.get('/hello/:name', (req, res) => {
// res.render('模板页面文字', '需要传递到这个模板页面上的数据')
res.render('welcome', {
name: req.params.name,
isLogin: false, // 是否登录
frusts: [
{ name: 'Apple' },
{ name: 'Orange' },
{ name: 'Banana' }
]
})
})
server.get('/about', (req, res) => {
res.render('about')
})
// end. 监听
server.listen(8080)