Express中的三个核心概念:(1)路由(2)中间件(3)模板引擎
www.expressjs.com 路由+中间件
express是基于nodejs的http模块而编写的高级模块,简化web服务端的应用开发
V4中定义:Express是请求处理工具,用于接收请求消息并返回响应消息。
HTTP知识点:
请求方法:用于表明客户端的请求目的。
GET(想获取指定资源),POST(想上传添加数据给服务器,数据在请求主体中),PUT(想上传跟新服务器上的数据,数据在请求主体中),DELETE(想删除服务器上的指定的资源)
POST,PUT区别:多次请求,POST影响多行,PUT只影响一行。多次PUT请求是“幂等的“
Express使用方法:
下载:npm i express
引入自己的模块:const express = require('express');
创建web服务器对象:
var app= express();
var server = require('http').createServer(app);
server.listen(8080);
使用express处理GET请求函数:
//一个路由
app.get(url,(req,res)=>{
res.send('hello world');//等价write 和end
});
app.post(url,(req,res)=>{});
app.put(
(url,(req,res)=>{});
app.delete(
(url,(req,res)=>{});
/** * 使用http模块创建web服务器,监听8080端口 * express作为请求工具 */ const http = require('http'); const express = require('express'); //console.log(express); var app = express();//express是一个请求处理函数 var server = http.createServer(app); server.listen(8080); app.get('/index',(req,res)=>{ res.send('<h1>This is the 主页</h1>'); }); app.get('/Login',(req,res)=>{ res.sendFile(__dirname+'/public/login.html');//sendfile=readfile + setHeader + write + end });
sendFile必须是绝对路径,可以使用__diename或者__filename解决。
server端接收客户端的请求:
(1) 客户端发送:http://127.0.0.1/user?uid
req对象中的query参数可以直接获得请求的参数。
app.get('/user',(req,res)=>{ console.log(req.query.uid); });
(2) 客户端发送:127.0.0.1:8080/88/java
//接收请求地址中的请求参数(params) //给变量取名,例如::bid第一个参数变量,:btype第二个参数变量 app.get('/book/:bid/:btype',(req,res)=>{ console.log(req.params.bid);//88 console.log(req.params.btype);//java res.send(req.params.bid +","+req.params.btype); })
联合使用http,express,mysql实现web动态请求:
客户端发送请求:http://127.0.0.1:080/stu/4
const mysql = require('mysql'); const http = require('http'); const express = require('express'); var pool = mysql.createPool({ user:'root', database:'bbs', connectionLimit:10 }); var app = express(); http.createServer(app).listen(8080); app.get('/stu/:uid',(req,res)=>{ var uid = req.params.uid; pool.getConnection((err,conn)=>{ conn.query('SELECT * FROM t_user WHERE uid=?',[uid],(err,result)=>{ var stu = result[0]; //var str = JSON.stringify(stu); //res.send(str); res.json(stu);//json方法把指定对象转换为JSON字符串,并输出JSON内容到客户端=JSON.stringify + write+setHeader conn.release(); }); }); });
中间件:
const http = require('http'); const express = require('express'); var app = express(); http.createServer(app).listen(8080); //use方法即中间件:拦截全部请求 app.use((req,res,next)=>{ next();//访问下一个中间件或路由并放行请求.作用 }); app.use('/index',(req,res,next)=>{ next(); }); app.get('/index',(req,res,next)=>{ res.sendFile(__dirname+'/public/index.html'); next();//继续访问下一个中间件或路由,没有next()则不会访问下一个中间件。 }); app.get('/index.css',(req,res)=>{ res.sendFile(__dirname+'/public/index.css'); }); app.get('/index.js',(req,res)=>{ res.sendFile(__dirname+'/public/index.js'); });
直接访问server上的静态页面:
app.use(express.static('public'));//127.0.0.1:8080/index.css直接就可以访问,不用再设置路由和路径