Express
一、安装Express二、基本使用三、中间件
1.最普通的中间件2.匹配路径中间件3.匹配路径和请求方法中间件4.连续注册中间件5.中间件应用 四、客户端发送请求的方式
1.传递参数params2.传递参数query 五、响应数据六、express路由七、静态资源服务器八、服务端的错误处理
Express一、安装ExpressExpress整个框架的核心就是中间件。
方式一:通过express提供的脚手架,直接创建一个应用的骨架;
安装脚手架 npm install -g express-generator
创建项目 express express-demo
安装依赖 npm install
启动项目 node bin/www
方式二:从零搭建自己的express应用结构;
二、基本使用生产package.json文件:npm init -y
手动安装express: npm install express
请求的路径中如果有一些参数,可以这样表达:
users/:userId;在request对象中药获取可以通过 req.params.userId;
返回数据,我们可以方便的使用json:
res.json(数据)方式;可以支持其他的方式,可以查看文档;https://www.expressjs.com.cn/guide/routing.html 三、中间件
1.最普通的中间件中间件的本质是传递给express的一个回调函数;这个回调函数接受三个参数:
请求对象(request对象);响应对象(response对象);next函数(在express中定义的用于执行下一个中间件的函数);
const express = require('express') const app = express(); // 编写普通的中间件 // use注册一个中间件(回调函数) // 默认响应第一个中间件 // 若需要响应其他中间件,需要调用next() app.use((req, res, next) => { console.log("注册了第1个普通的中间件"); res.end("hello world"); next(); }) app.use((req, res, next) => { console.log("注册了第2个普通的中间件"); // res.end("hello world"); //前面已经调用过end了,已经结束了周期,再调用会报错 // 所以一般end出现在最后一个普通中间件 next() }) app.use((req, res, next) => { console.log("注册了第3个普通的中间件"); }) app.listen(8000, () => { console.log("普通中间件服务器启动成功"); })2.匹配路径中间件
const express = require('express') const app = express(); // 中间件:查找所有路径匹配的中间件,只执行第一个满足的中间件,除非第一个中调用了next app.use((req, res, next) => { console.log("home middleware 03"); res.end("01"); // next(); }) // 路径匹配中间件 与请求关系无关,与路径有关 app.use('/home', (req, res, next) => { console.log("home middleware 01"); res.end("01"); next(); }) // 永远是第一个中间件 app.use('/home', (req, res, next) => { console.log("home middleware 02"); }) app.listen(8000, () => { console.log("普通中间件服务器启动成功"); })3.匹配路径和请求方法中间件
const express = require('express') const app = express(); // 路径和方法都匹配的中间件 app.get('/home', (req, res, next) => { console.log("home path and method middlelevel01"); }) app.post('/home', (req, res, next) => { console.log("home path and method middlelevel02"); }) app.listen(8000, () => { console.log("普通中间件服务器启动成功"); })4.连续注册中间件
const express = require('express') const app = express(); app.use((req, res, next) => { console.log("home middleware 01"); next(); }) app.get('/home', (req, res, next) => { console.log("home middleware 01"); next(); }, (req, res, next) => { console.log("home middleware 02"); next(); }, (req, res, next) => { console.log("home middleware 03"); next(); }, (req, res, next) => { console.log("home middleware 04"); res.end(); }) app.listen(8000, () => { console.log("普通中间件服务器启动成功"); })5.中间件应用
body解析:
const express = require('express') const app = express(); // 处理body信息 // app.use((req, res, next) => { // if (req.headers["content-type"] === 'application/json') { // req.on('data', (data) => { // console.log(data.toString()); // const info = JSON.parse(data.toString()) // req.body = info; // }); // req.on('end', () => { // next(); // }) // } // }) // 手写太麻烦了。有写好的 // body-parser app.use(express.json()) // extended : // true:对urlencoded解析时用的第三方库:qs // false:对urlencoded解析时用的Node内置模块:querystring app.use(express.urlencoded({extended:true}))//解析的是 application/x-www-form-urlencoded: app.post('/login', (req, res, next) => { console.log(req.body); res.end("coder, welcome back"); }) app.post('/products', (req, res, next) => { console.log(req.body); res.end("uplog"); }) app.listen(8000, () => { console.log("普通中间件服务器启动成功"); })
请求日志记录:使用第三方中间件:morgan(需要单独安装)
const fs = require('fs') const express = require('express') const morgan = require('morgan') const app = express(); const writeStream = fs.createWriteStream('./logs/access.log', { flags: 'a+' }) app.use(morgan("combined", {stream: writeStream})) app.get('/home', (req, res, next) => { res.end("hello") }) app.listen(8000, () => { console.log("解析服务器启动成功"); })
上传文件中间件 – 添加后缀名:这里不在详细演示
四、客户端发送请求的方式1.传递参数params客户端传递到服务器参数的方法常见的是5种:
方式一:通过get请求中的URL的params;方式二:通过get请求中的URL的query;方式三:通过post请求中的body的json格式(中间件中已经使用过);方式四:通过post请求中的body的x-www-form-urlencoded格式(中间件使用过);方式五:通过post请求中的form-data格式(中间件中使用过);
2.传递参数query请求地址:http://localhost:8000/login/abc/why
请求地址:http://localhost:8000/login?username=why&password=123
const express = require('express') const app = new express(); app.use('/login/:id/:name', (req, res, next) => { console.log(req.params); // { id: 'abc', name: 'why' } res.end('请求成功') }) app.use('/login', (req, res, next) => { console.log(req.query); // { username: 'why', password: '123' } res.end('请求成功') }) app.listen(8000, () => { console.log("express初体验服务器启动~"); })五、响应数据
end方法 :类似于http中的response.end方法,用法是一致的json方法 :json方法中可以传入很多的类型:object、array、string、boolean、number、null等,它们会被转换成 json格式返回;status方法:用于设置状态码;更多响应的方式:https://www.expressjs.com.cn/4x/api.html#res 六、express路由
使用 express.Router来创建一个路由处理程序: 一个Router实例拥有完整的中间件和路由系统;
路由:
const express = require('express') const router = express.Router(); router.get('/', (req, res, next) => { res.json(["why","koce","dksf"]) }) router.get('/:id', (req, res, next) => { res.json(`${req.params.id}用户信息`) }) router.post('/', (req, res, next) => { res.json("sdfsdf") }) module.exports = router;
请求:
const express = require('express') const router = require('./12.express路由1') const app = express(); app.use('/user', router); app.use('/user/id', router); app.listen(8000, () => { console.log("启动成功"); })七、静态资源服务器
八、服务端的错误处理Node也可以作为静态资源服务器,并且express给我们提供了方便部署静态资源的方法static()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)