Express
来源:互联网 发布:机械原理动画制作软件 编辑:程序博客网 时间:2024/06/05 01:02
一、使用express
本地安装
$ npm install express
获取、引用通过变量app就可以调用express的各种方法
let express=require('express');//引入express模块,用来帮助我们创建http服务器let app=express();//express是一个函数,需要执行才能都得到应用的函数,app也是一个函数//请求监听函数,当客户端向服务器发送请求时执行的回调函数app.listen(3000,function(){ console.log('服务器已经启动,监听3000端口');});
二、路由
优点:
- 根据客户端的不同请求路径返回不同的内容
- 简单,好维护
- 结构清晰
http请求的方法
GET/POST/PUT/DELETE
例如:GET语法(其他的方法也类似)
app.get(path,function(request,response));
- 第一个参数path:请求路径
-第二个参数为请求的回调函数,有两个参数分别是:
- request(req):代表客户端请求信息
- response(res): 代表服务器响应信息
let express=require('express');let app=express();//app上也可以调用一些方法,用这些方法来定义路由//当服务器收到客户端请求后,先由app来进行处理,app不具体响应请求,而是进行判断应该由哪个路由来处理app.get('/',function(req,res){ res.end('home');});app.post('/user',function(req,res){ res.end('post');});app.put('/user',function(req,res){ res.end('put');});app.delete('/user',function(req,res){ res.end('delete');})app.listen(3000);
app.all()函数
all: 表示匹配所有的方法和所有的路径
app.all('*',function(req,res){ res.end('404');});
三、获取请求参数
例如:htpp://localhost:8080/signup?name=alice&&age=9
req.method: 返回请求的方式
req.url: 返回完整的URL路径,包括路径名(pathname)+查询字符串(query)=>/signup?name=alice&&age=9
req.path: 相当于路径名,就是端口号和问号中间的那部分=>/signup
req.query: 请求体的内容 => {name:’alice’,age:9}
req.headers: 设置请求头对象 (相当于之前的res.setHeader)
req.host : 返回请求头里取的主机名(不包含端口号)
简单的登录注册例子
let express=require('express');let app=express();app.get('/signup',function(req,res){ res.header('Content-Type','text/html;charset=utf8'); //设置请求头内容的格式,避免出现中文乱码现象res.end(` <form action="/signup" method="POST"> 用户名 <input type="text" name="name"><br/> 密码 <input type="text" name="password"><br/> <input type="submit"> </form> `);});//通过发送post请求就可以提交用户提交的注册信息app.post('/signup',function(req,res){ //req是一个可读流var str='';req.on('data',function(chunk){str+=chunk.toString();});req.on('end',function(req,res){ res.end(str);});});app.listen(3000);
获得查询字符串
//http://localhost:3000/?a=1&b=2&c=3
app.get(‘/’,function(req,res){
res.end(util.inspect(req.query));
});
paramas路径参数
//id:称为路径参数////http://localhost:3000/user/ID/markapp.get('/user/:id/:name',function(req,res){/* let id=req.params.id; *let name=req.paramas.name; *res.end(id+name);*/ res.send(req.params.id+" "+req.params.name);})
next函数
app.param('num1',function(req,res,next,num1){ //把字符串转成数字赋给了请求对象的num1属性 req.num1 = parseInt(num1); next();//表示继续向下执行})app.param('num2',function(req,res,next,num2){ //把字符串转成数字赋给了请求对象的num1属性 req.num2 = parseInt(num2); next();//表示继续向下执行,一直到全部的next执行结束后才会去执行下面是代码})//num1 num2 是两个占位符 表示匹配路径;/add/任意字符串/任意字符串app.get('/add/:num1/:num2',function(req,res){ res.end('和是:'+(req.num1+req.num2));});app.get('/minus/:num1/:num2',function(req,res){ res.end('差是'+(req.num1-req.num2));});
send&&sendFile
send方法向浏览器发送一个响应信息,并可以智能处理不同类型的数据 并在输出响应时会自动进行一些设置,比如HEAD信息、HTTP缓存支持等等。
语法: res.send([body|status], [body])
例 1
1.当参数为一个String时,Content-Type默认设置为”text/html”
res.send('Hello World'); //Hello World
2.当参数为Array或Object时,Express会返回一个JSON
res.send({ user: 'tobi' }); //{"user":"tobi"}res.send([1,2,3]); //[1,2,3]
3.当参数为一个Number时,并且没有上面提到的任何一条在响应体里,Express会帮你设置一个响应体,比如:200会返回字符”OK”
require(‘_http_server’).STATUS_CODES (引入模块)
res.send(200); // OKres.send(404); // Not Foundres.send(500); // Internal Server Error
例2
let express=require('express');let app=express();//方式一:(直接通过设置获取的路径,最后返回相应的内容)let users=[{name:'mark',age:9}];app.get('/users',function(req,res){ res.send(users);});//方式二:(在当前文件新建一个users.json文件,并且写入要读取的内容)let path=require('path');app.get('/users',function(req,res){ res.sendFile(path.resolve('./users.json'));//设置绝对路径//方式三:res.sendFile('./users.json',{root:__dirname});// 设置根目录});let app.listen(8080);
设置状态码
app.get('/other',function(req,res){ //res.statusCode = 404;//设置状态码 // res.status(404);//要用来设置响应状态码;但是这个在浏览器发送请求时,浏览器会一直不停地加载,因为res.status中没有end的方法,没法返回结果 res.sendStatus(404);//send里面有end方法,所以相对于status,sendStatus会自动返回})
四、中间件
中间件就是处理HTTP请求的函数,用来完成各种特定的任务(以及一些公共逻辑),比如检查用户是否登录、检测用户是否有权限访问等,它的特点是:
- 一个中间件处理完请求和响应可以把数据在传递给下一个中间件
- 回调函数的next参数是一个函数,调用表示调用后续的中间件并将数据传递给下一个中间件
- 还可以根据路径区分进行返回执行不同的中间件
let express=require('express'):let app=express();//use表示使用一个中间件函数//next是一个方法,表示继续向下执行,只有当中间件函数执行完成后,才会去执行实际要操作内容的代码app.use(function(req,res,next){ res.header('Content-Type','text/html;charset=utf8');fs.readFile('1.txt','utf8',function(err,data){ if(err){ next(err); } else{ res.msg=data; next(); }});app.get('/',function(req,res){ res.end('首页');});app.get('/user',function(req,res){ res.end('用户管理');});//错误处理中间件多了一个参数err,只有当中间件中去读取文件时出现错误才会走下面的函数app.use(function(err,req,res,next){ console.error(err);});app.listen(8080);
next的原理
let stack =[ function(req,res,next){ console.log(1); next(); }, function(req,res,next){ console.log(2); next(); }, function(req,res,next){ console.log(3); next(); }]let i=0;function next(){ let fn = stack[i++]; if(fn) fn(null,null,next);}next();
路由中间件的使用
* 路由中间件*:这是一个中间件 ,用来提供路由功能,解决的是路由的集中配置问题,能把不同的类型的路由配置到不同的文件里面去
let express = require('express');let user = require('./routes/user'); //在routes文件夹下引入user.js let app = express();//当服务器收到客户端请求的时候,会判断请求路径是不是以/user开头,如果是以/user开头,会交给user中间件来处理// /user/signupapp.use('/user',user);//以/user开头,然后再到引入的路径中找到相应的内容app.listen(8080);
/** * 定义路由中间件 * 中间件里定义用户相关的路由 */let express = require('express');//调用Router方法会返回一个路由对象 就是路由中间件let router = express.Router();//路由中间件的用法和app很像 mini-approuter.get('/signup',function(req,res){ res.send('注册');});module.exports = router;//将路由导出
五、静态文件服务器
如果要在网页中加载静态文件(css、js、img),就需要另外指定一个存放静态文件的目录,当浏览器发出非HTML文件请求时,服务器端就会到这个目录下去寻找相关文件
用法
1.app.use(express.static(path.join(__dirname,’/’)));
2. app.use(‘/static’,express.static(path.resolve(‘public’)));
都是设置的根路径,第二种的第一个参数是用来判断路径是不是以/static开头,即:http://localhost:8080/static
重定向
redirect方法允许网址的重定向,跳转到指定的url并且可以指定status,默认为302方式。
语法 :res.redirect([status], url);
app.get('/baidu',function(req,res){ res.redirect('http://www.baidu.com');});
六、curl客户端使用方法
- 指定请求头
curl -H 'content-type:application/json;charset=utf-8' http://localhost:8080/users
- 指定方法名
curl -X POST http://localhost:8080/users
- 指定请求体
curl --data "name=mark&age=8" http://localhost:8080/users
注释:
自己总结的知识点,有不好的地方希望大家能提出意见~~~
- express
- express
- Express
- express
- Express
- express
- Express
- express
- Express
- express
- express
- Express
- Express, Express, Express
- express 与 express-generator
- Express express-session
- Dev Express
- express.exe
- PCI Express
- <python>strip() 函数和 split() 函数的理解
- 获取自身递增数字及匹配数组内容
- poj2942
- VSCode的快捷键
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。
- Express
- 品胜上市:要做“制造商+平台商+服务商”
- 又一波大微袭来,微鲸电视“我呸体”风靡网络
- 微鲸发布43吋4K新品 重新定义行业标杆
- 李一男被抓系炒作,实为预热明天发布会
- Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
- Android热修复之—阿里热修集成和使用指南
- CSDN如何转载文章
- 前端求职准备(从简历到面试)