Express
- 原生的 http 在某些方面表现不足以应对我们的开发需求, 所以就需要使用框架来加快开发效率
- 官网: https://www.expressjs.com.cn/
安装:
> npm install express --save
// 0. 安装
// 1. 引包
const express = require('express');
// 2. 创建服务器应用程序
// 也就是原来的 http.createServer()
const app = express();
// 公开指定目录
// 只要这样做了,就可以直接通过 /public/xx 的方式访问 public目录中的所有资源了
app.use('/public/', express.static('./public/'));
// 当服务器收到 get 请求 / 的时候, 执行回调函数
app.get('/', (req, res) => {
// 在 Express 中可以直接使用 req.query 来获取url传递的参数
console.log(req.query);
// 在 express 中 write 和 end 方法依然可以用
// res.write('hello ');
// res.end('express !')
res.send('hello express!');
});
// 相当于 server.listen
app.listen(3000, () => {
console.log('port 3000, Server is Running...');
});
1 基本路由
组成:
- 请求方法
- 请求路径
- 请求处理函数
get:
// 当你以 GET 方法请求 / 的时候, 执行对应的处理函数
app.get('/',(req,res)=>{
res.send('Hello World');
});
post:
// 当你以 POST 方法请求 / 的时候, 执行对应的处理函数
app.post('/',(req,res)=>{
res.send('Got a POST request');
})
2 静态服务
// 引入
const express = require('express');
// 创建 app
const app = express();
// 当以 /public/开头的时候, 去 ./public/ 目录中查找对应的资源
app.use('/public/', express.static('./public'));
app.get('/', (req, res) => {
res.send('hello world');
});
app.listen(3000, () => {
console.log('express app is Running....');
});
访问 login.html 不省略第一个参数时:
访问 login.html 省略第一个参数时:
// 当省略第一个参数的时候, 则可以通过省略 '/public' 的方式来访问对应资源
app.use(express.static('./public/'));
特殊写法:
// 必须是 /a/public 目录中的资源具体路径
// 可以理解为 '/a/' 是 '/public/' 的别名
app.use('/a/', express.static('./public/'));
3 在 Express 中配置使用 art-template
模板引擎
安装:
npm install --save art-template
npm install --sava express-art-template
配置 :
// 第一个参数, 标识, 当渲染以 .html结尾(可更改)的文件的时候, 使用 art-template模板引擎
// express-art-template 是专门用来在 Express 中把 art-template 整合到 Express 中
// 虽然外面这里不需要加载 art-template , 但是也必须安装
// 原因就在于 express-art-template 依赖了 art-template
app.engine('html', require('express-art-template'));
使用:
// Express为 Response 响应对象提供了一个方法: reader
// reader 方法默认是不可以使用的, 但是如果配置了模板引擎就可以使用了
// res.render('html模板名',{模板数据});
// 第一个参数不能写其他路径, 默认会去项目中的 views 目录查找该模板文件
app.get('/', (req, res) => {
res.render('404.html');
});
如果想要修改默认的 views
目录, 可以这么做:
app.set('views',要修改的路径);
实例演示
// E:\Exercises\Node\express-demo\feedback-express\express使用art-template.js
const express = require('express');
const app = express();
// 配置
app.engine('html', require('express-art-template'));
// 使用
app.get('/', (req, res) => {
res.render('404.html');
});
app.get('/admin', (req, res) => {
res.render('admin/index.html', {
title: '管理系统'
});
});
app.listen(3000, () => {
console.log('running....');
});
4 在Express 中获取表单 POST 请求体数据
在 express 中没有内置获取表单 POST请求体的 API , 这里需要使用一个第三方包 : body-parser
安装:
npm install --sava body-parser
配置:
var express = require('express')
// 0. 引包
var bodyParser = require('body-parser')
var app = express()
// 配置 body-parser
// 只要加入这个配置, 则在 req请求对象上会多出来一个属性: body
// 也就是说可以直接通过req.body 来获取表单 POST请求体数据
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
app.use(function (req, res) {
res.setHeader('Content-Type', 'text/plain')
res.write('you posted:\n')
// 可以通过 req.body 来获取表单 POST 请求体数据
res.end(JSON.stringify(req.body, null, 2))
})
5 在Express 中获取表单 GET 请求参数
Express 内置了一个 API , 可以直接通过 req.query
来获取
req.query