express
简介
web开发框架
下载
npm install express
中间件
中间件方法和请求处理函数
app.get(‘请求路径’,‘处理函数’)
app.post(‘请求路径’,‘处理函数’)
// * 表示匹配任何路径
app.get('*', (req, res, next) => {
console.log(++i);
next();
});
app.get('/req1', (req, res) => {
console.log(2222);
res.send();
});
1 处理get请求参数
req.query
const express = require('express');
// 一个中间件
const bodyParser = require('body-parser');
// 创建网站服务器
const app = express();
app.get('/req1', (req, res) => {
res.send(req.query.a + "-" + req.query.b);
});
app.listen(7788);
consol ning');
2 处理post请求参数
使用中间件 body-parser
通过req.body
const express = require('express');
// 一个中间件
const bodyParser = require('body-parser');
// 创建网站服务器
const app = express();
// querystring "a=10&b=20"--->{a:10,b:20}
// 使用中间件,任何请求都会先走它,会处理post请求
// 参数为true使用第三方模块qs, false用的是nodejs中querystring
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/post', (req, res) => {
console.log(req.body);
res.send(req.body);
});
app.listen(7788);
console.log('app is running');
postman 模拟各种请求
3 中间件app.use()
基础认识:
const express = require('express');
let app = express();
// 中间件 app.use() 不传参数匹配所有请求方式
app.use('/index', (req, res, next) => {
console.log(111);
next();
});
app.get('/req', (req, res) => {
res.send('req');
});
app.listen(7788);
3.1 app.use()基础应用
const express = require('express');
// 创建网站服务器
const app = express();
// app.use((req, res, next) => {
// res.send('公司网站正在维护,请于明日早八点后访问');
// });
app.use('/index', (req, res, next) => {
let isLogin = true;
if (isLogin) {
next();
} else {
res.send('请登录后访问主页');
}
});
app.get('/index', (req, res) => {
res.send('Hello World');
});
app.use((req, res, next) => {
res.send('您访问的资源不存在');
});
app.listen(7788);
console.log('app is running');
3.2 使用app.use()处理错误
const express = require('express');
const fs = require('fs');
// 创建网站服务器
const app = express();
app.get('/index', (req, res, next) => {
//throw new Error('something is wrong');
//console.log(111);
//next();
fs.readFile('./21.js', 'utf8', (err, data) => {
if (err != null) {
next(err);
} else {
res.send(data);
}
});
});
// 处理错误中间件 前面有抛错或者next()传参数下面就会被执行
app.use((err, req, res, next) => {
console.log(333);
res.status(500).send('服务器内部发生未知错误');
});
app.listen(7788);
console.log('app is running');
例二
const express = require('express');
const fs = require('fs');
const readFile = require('util').promisify(fs.readFile); // 将异步代码 转换为promise
const app = express();
app.get('/admin', async (req, res, next) => {
try {
let result = await readFile('./1.js');
console.log(result.toString());
} catch (err) {
next(err);
}
});
app.use((err, req, res, next) => {
res.status(500).send(err.message);
})
app.listen(7788);
4 路由
可以实现类似
localhost:9999/static/index.html
ocalhost:9999/static/news.html
const express = require('express');
const app = express();
// 创建路由对象
const home = express.Router();
// 相当于一级路由
home.get('/', (req, res) => {
res.send('wel');
});
// /home/index 二级路由
home.get('/index', (req, res) => {
res.send('welcome');
});
app.use('/home', home); // 给路由对象匹配路径
app.listen(9999);
const express = require('express');
const app = express();
// /user/.. 都能够匹配
app.get('/user/:id', (req, res) => {
res.send(req.params); // {"id":":99"}
// http://localhost:9999/user/99
});
app.listen(9999);
5 express.static()
可以托管静态文件
const express = require('express');
const path = require('path');
const app = express();
// 此文件同路径下有个public文件夹 用于存在静态文件
// app.use(express.static(__dirname + '/public')); //设置静态文件目录 参数为路径
// localhost:9999/index.html
app.use('/static', express.static(path.join(__dirname, 'public'))); //设置静态文件目录 参数为路径
// localhost:9999/static/index.html
app.listen(9999);
6 express && template
需要两个工具 express-art-template && art-template
const express = require('express');
const path = require('path');
const app = express();
// 配置模板引擎
app.engine('art', require('express-art-template'));
// 设置模板存放的目录 此文件同路径下有个views文件夹,存放模板
app.set('views', path.join(__dirname, 'views'));
// 设置默认的模板扩展名
app.set('view engine', 'art'); // 公共模板数据
app.locals.msg = 'helloword';
app.get('/index', (req, res) =>{
res.render('index'); // 调用模板
});
app.get('/news', (req, res) =>{
res.render('news');
});
app.listen(9999);