express的简单使用

express的简单使用

需要的npm包:express、body-parser、art-template、express-art-template

预先引入模块:express、fs、path、body-parser

一、静态页面的处理

  1. 使用 app.get方法精确匹配地址
  2. 使用 res.sendFile方法发送静态页面内容(可以发字符串内容或文件路径)
1
2
3
4
app.get('/static', (req, res) => {
const filePath = path.join(__dirname, '/pages/static.html')
res.sendfile(filePath)
})

二、资源的处理

  1. 使用app.use方法匹配所有匹配字符串开头的地址

  2. 发送资源内容,共有2种方法

① 使用res.sendFile方法发送资源内容

1
2
3
4
app.use('/static', (req, res) => {
const filePath = path.join(__dirname, req.originalUrl)
res.sendfile(filePath)
})

② 使用express.static回调函数发送资源内容

1
2
// express.static中的参数为存放静态资源的文件夹名
app.use('/static', express.static('static'))

三、模板引擎的使用

  1. 初始化引擎
    1
    2
    3
    4
    // html为模板文件后缀名
    app.engine('html', require('express-art-template'))
    // pages为存放模板的文件夹名,将views文件夹改为pages文件夹
    app.set('views', 'pages')
  2. 使用模板

① 使用res.send方法发送模板字符串

1
2
3
4
5
6
7
8
app.get('/', (req, res) => {
const filePath = path.join(__dirname, '/pages/index.html')
fs.readFile(dataPath, 'utf8', (err, data) => {
if (err) return console.log('读取出错', err)
data = JSON.parse(data)
res.send(template(filePath, data))
})
})

② 使用res.render方法渲染模板内容

1
2
3
4
5
6
7
8
9
app.get('/', (req, res) => {
const filePath = path.join(__dirname, '/pages/index.html')
fs.readFile(dataPath, 'utf8', (err, data) => {
if (err) return console.log('读取出错', err)
data = JSON.parse(data)
// render方法的第一个参数为相对路径的话相对的是当前目录的views文件夹,除非用app.set修改
res.render(filePath, data)
})
})

四、get请求的处理

  1. 使用 app.get方法精确匹配地址
  2. 使用 req.query获得转成对象的键值对数据

五、post请求的处理

  1. 引入并初始化body-parser
1
2
3
const bodyParser = require('body-parser')
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))
  1. 使用 app.post方法精确匹配地址

  2. 使用 req.body获得转成对象的键值对数据

六、重定向和状态码设置

1
2
3
4
// 重定向至'.../'
res.redirect('/')
// 状态码改变为302
res.status(302)

七、express中间件的使用

概念:

1. express中间件是一个函数,语法:`(req, res, next) => {语句; next();}`
2. 下一个中间件可以获取到上一个中间件的内容,如上面的req和res
3. 中间件可以对内容进行处理
4. 处理完成后会给下一个[路径匹配的]中间件使用

作用:

1. 把中间件放在响应的最前面,统一处理post请求的参数,存到req或res的属性中
2. 在响应过程中进行分支处理,例如将访问过多的ip进行重定向(通过req.ip获取访问ip)

八、express路由容器的使用

对于越大型的项目,不同文件的分工就越重要,维护时也越方便,路由的作用就是将主文件的作用整合,只让主文件处理大体问题,请求的响应一律交给路由处理。

对路由模块的处理:

  1. const router = express.Router()

  2. 1
    2
    3
    router.get(路径, (req, res) => {
    ...语句(处理
    })
  3. module.exports = router

对需要路由的文件:

  1. const router = require('./模块名')
  2. app.use(router)

九、登录的处理

​ 在express中,登录信息可以存放在req.session的属性中,例如req.session.user = 用户信息,而访问首页时可以对登录信息进行检测,如果存在相应的信息就放行(next());如果不存在就重定向到登录页进行拦截。