获取get请求
下面代码就是设置一个get请求,当输入内容到input框,就会把输入的值作为input框name属性的值,并且把这个name的值当成参数,发送网络请求
// js
app.get('/',(req,res)=>{
res.render('index.ejs')
})
// ejs
<form action="/search">
<input type="text" name="searchKey"/>
<button type="submit">搜索</button>
</form>
写接口进行接收
app.get('/search',(req,res)=>{
console.log(req.url);
res.send('成功')
})
// 输出 /search?searchKey=%E5%A4%A7%E5%A4%A7%E5%82%BB%E9%80%BC
// 就可以拿到发送请求的值
取出来(自己封装的)
app.get('/search',(req,res)=>{
let queryStr = req.url.split('?')[1]
console.log(queryStr);
let queryArr = queryStr.split("&") // 拿到两个参数的数组
// 把获取的值放到一个对象中
let query = {}
queryArr.forEach(item =>{
let valueKey = item.split("=")
let key = valueKey[0]
let value = valueKey[1]
query[key] = value
})
console.log(query);
// 通关这种方式拿到里面的值
console.log(query.userName);
res.send('成功')
})
使用express封装好的query属性
app.get('/search',(req,res)=>{
console.log(req.query);
// 可以拿到上面的query对象
})
获取post请求
首先我们得知道在form表单进行post请求,enctype属性一般设置为“application/x-www-form-urlencoded”,如果设置成multipart/form-data,则多用于文件上传,如
<form action="#" method="post" enctype="application/x-www-form-urlencoded">
</form>
使用
// 首先需要设置解析body中间件
app.use(express.urlencoded())
app.post('/search',(req,res)=>{
// post 请求的数据放在req.body中,并且在url上是没有的
// 要通关body拿到数据,需要 app.use(express.urlencoded())
console.log(req.body);
})
写一个简单登录
<form action="/login" method="POST">
<input type="text" name="userName"/>
<input type="password" name="passWord"/>
<button type="submit">登录</button>
</form>
app.use(express.urlencoded())
app.post('/login',async (req,res)=>{
let userName = req.body.userName
let passWord = req.body.passWord
let sqlStr = 'select * from user where userName = ? and passWord = ?'
// 直接把数据定义到数组当中
let sqlArr = [userName,passWord]
let result = await aamysql(sqlStr,sqlArr)
if (result.length === 0) {
res.send('失败')
}else{
res.send('成功')
}
})
中间件
含义,中间件的作用于在express接收到请求 到 调用(req,res)的回调函数 这个中间时候产生作用的东西
注意,中间件代码不需要写在接收请求方法(get,post)方法前面才会有效果
中间件的作用‘
- 执行任何代码。
- 对请求和响应对象进行更改。(req,res)
- 结束请求/响应循环。
- 调用堆栈中的下一个中间件函数。
使用
// app的use方法就是使用中间件。里面传一个函数
app.use(function(req,res,next){
let queryaa = req.url.split('?')
if (queryaa.length > 0) {
let queryStr = queryaa[1]
if (queryStr) {
let queryArr = queryStr.split("&") // 拿到两个参数的数组
let aa = {}
queryArr.forEach(item =>{
let valueKey = item.split("=")
let key = valueKey[0]
let value = valueKey[1]
aa[key] = value
})
req.aa = aa
next()
}
}else{
next()
}
})
// app的use方法就是使用中间件。里面传一个函数
app.use(function(req,res,next){
// 在req定义一个方法
req.bb = function (a,b){
return a+b
}
next()
})
app.get('/',(req,res)=>{
// 这里就可以使用
res.send('这是首页'+req.bb(1,2))
console.log(req.aa);
})
路由中间件
// 路由中间件的使用
let router1 = express.Router()
// 也可以使用中间件
router1.use(function(req,res,next){
console.log('判断是否是商场用户');
next()
})
router1.get('/',(req,res)=>{
res.send('这是商场首页')
})
router1.get('/list',(req,res)=>{
res.send('这是分类页面')
})
app.use('/mail',router1)
// 在我们在浏览器上输入 /mail 就可以达到 这是商场首页 输入/mail/list 可以到达 是分类页面
在中间件中写跨域
app.use(function(req,res,next){
res.append('Access-Control-Allow-Origin','*') // 代表所有源头都可以访问
res.append('Access-Control-Allow-Content','*') // 代表所有的请求都可以成功
}
)
app.js页面解释与理解
// 报错模块
var createError = require('http-errors');
var express = require('express');
var path = require('path');
// 解析cookie的文件
var cookieParser = require('cookie-parser');
// 设置输出日志的
var logger = require('morgan');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var app = express();
// 下面是中间件
// 视图
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// 开发环境的错误日志输出
app.use(logger('dev'));
// 解析json数据
app.use(express.json());
// 解析body
app.use(express.urlencoded({ extended: false }));
// 解析cookie
app.use(cookieParser());
// 形成静态服务器
app.use(express.static(path.join(__dirname, 'public')));
// 路由中间件
app.use('/', indexRouter);
app.use('/users', usersRouter);
// 当请求都无法从上面提供对应的东西,就会报404错误,这里就是设置404错误的地方
app.use(function(req, res, next) {
// 这里就可以设置自定义的404页面
next(createError(404));
});
// 进行错误处理
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
// 如果在开发环境(运行)就把错误报出来
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});