手机版

浅谈Node.js轻量级Web框架Express4.x的用户指南

时间:2021-09-05 来源:互联网 编辑:宝哥软件园 浏览:

Express是一个轻量级的Web框架,简单灵活

也是目前最流行的基于Nodejs的Web框架

通过它,我们可以快速建立一个功能齐全的网站(英文的express意思是快车)

Express现在是4.x版本,更新很快,与旧版本不兼容,导致市面上很多优秀的Node书籍都过时了

本文是入门级的Express使用,需要一定的Node.js基础

Web应用程序创建

首先要做的是下载快递和参考

Npm快速安装-保存全局安装只是-g

引用快递

var express=require(' express ');var app=express();通过app,我们可以使用各种快递API

在3.x版本中是这样写的。

var app=express . CreateServer();现在这个功能已经被放弃了

下面是正式创建的应用程序

//app . jsvar express=require(' express ');var app=express();app.get('/'),function(req,RES){ RES . send(' Express ');});app . listen(3000);启动后,您可以在页面上看到足够的效果

$ node app . js

app.get()

上面的app.listen()就不多说了

用于监听端口

App。get(路径,函数(req,res) {})用于处理客户端发送给服务器的GET请求

路径表示请求的路径

回调函数的请求和响应意味着请求和响应

该请求指示客户端发送的HTTP请求信息

响应指示服务器发送的HTTP响应信息

使用res.send()向客户端发送信息

//app . jsvar express=require(' express ');var app=express();app.get('/'),function(req,RES){ RES . send(' h1 EXPRESS/h1 ');});app.get('/demo ',function(req,RES){ RES . send(' h1 demo/h1 ');})app.get('/* ',function(req,RES){ RES . send(' h 1404 h1 ');})app . listen(3000);

app.post()

App。post(路径,函数(req,res) {})用于处理客户端发送给服务器的POST请求

与GET请求不同,POST请求不会将信息放入URL中

它被写入请求头

它的分析是不同的,我们稍后再谈

app.all()

在此之前,我还想提一个——中间件的概念

中间件中间件在不同的环境中有不同的含义

在我们的表达中,它只是一个特殊的功能

用于处理HTTP请求的函数

而且它还有一个特点就是——。处理后,一个中间件可以转移到下一个中间件进行处理

功能(请求、资源、下一个){ 0.next();}(如果不使用execute next函数,那么以后听的函数就不会被执行)

您可以将一个字符串参数传递给next,它表示抛出的错误消息

这样,当数据被传递下去时,中间件不再处理它

直到找到错误处理功能

在应用程序的使用中。全部(路径,函数(req,RES,next) {})

我们需要定义这样的中间件

此方法可以过滤所有路径上的请求

换句话说,在所有其他中间件进程之前

首先必须通过app.all()的中间件进行处理

var express=require(' express ');var app=express();app.all('* ',function(req,res,next){ res.writeHead(200,' : '));next();});app.get('/'),function(req,RES){ RES . end(' h1 EXPRESS/h1 ');});app.get('/demo ',function(req,RES){ RES . end(' h1 demo/h1 ');})app.get('/* ',function(req,RES){ RES . end(' h 1404 h1 ');})app . listen(3000);所以不管客户端向我们发送什么样的路径请求,

在服务器响应信息之前,它将被标记一个响应头

app.use()

方法app.use ([path,]函数(req,RES,next) {})一般用于调用中间件

与前面的函数不同,它的第一个path参数可以省略,默认值为'/'

app . use(express . static(path . join(_ _ dirname,'/public '));上面的用法是指定静态文件的访问路径

通过下一个参数,我们可以连续调用中间件函数

app.use(function(req,res,next){ console . log(1);next();});app.use(function(req,res,next){ console . log(2);next();});app.use(function(req,res,next){ console . log(3);});app.use(function(req,res,next){ console . log(4);});当发出网络请求时

控制台将输出1 2 3

因为第三个中间件不调用下一个方法

这就是这个过程的结束

不会输出4

除了调用中间件,app.use()

您还可以根据不同的请求路径返回不同的信息

但是我们通常不这样使用它

//app . jsvar express=require(' express ');var app=express();app.use(function(req,res,next){ if(req . URL=='/'){ RES . end(' h1 EXPRESS/h1 ');} else { next();}});app.use(function(req,res,next){ if(req . URL=='/demo '){ RES . end(' h1 demo/h1 ');} else { next();}});app.use(function(req,res,next){ RES . end(' h 1404 h1 ');});app . listen(3000);请求和响应

req和res参数对于上面表达每个回调函数都是不可缺少的

重要性可见一斑

req和res中常见的属性/方法如下(也可以使用native node.js中req和res的属性/方法)

请求对象:

当回调是外部文件时, 用于访问express的实例req.baseUrl获取当前安装的Url路径req.body/cookies获取“请求正文”/Cookies req.fresh/stale判断请求是否仍然“新鲜”req.hostname/Ip获取主机名和IP地址req.originalUrl获取原始请求URL req.params获取参数req.path获取请求路径req.protocol获取协议类型req.query获取查询参数字符串req . URL的路由获取当前匹配的路由req.su Bdomains获取子域名称req.acceptsCharsets返回指定字符集请求的第一个可接受的字符代码. acceptsEncodings返回指定字符集请求的第一个可接受的字符代码. req.acceptsLanguages返回指定字符集请求的第一个可接受的字符代码. acceptsCharsets() 检查可接受的请求文档类型req.get()获取指定的HTTP请求头req.is()判断请求头的MIME类型Response对象内容类型:

API的意思res.app与req.app res.append()相同。添加指定的HTTP头res.set()将重置头res.cookie()设置Cookie res.clearCookie()设置Cookie res.download()设置在res.append()之前和之后发送指定路径的文件res.get()并返回指定的HTTP头res.json()发送json响应res.JSONP()发送JSONP响应res.location()仅设置响应的Location HTTP头。不设置状态代码或关闭响应res.redirect()来设置响应的位置HTTP头。并设置状态码302 res.send()发送HTTP响应res.sendFile()发送指定路径的文件——它会根据文件扩展名自动设置Content-Type res.set()来设置HTTP头,传入对象可以设置多个头res.status()来设置HTTP状态码res.type()来设置Content-Type的MIME类型来挑一些重点

req.query

Req.query可以获取请求路径参数的对象

向服务器发送请求http://localhost:3000/?用户=testerpass[a]=123pass[b]=456

//app . jsvar express=require(' express ');var app=express();app.get('/'),function(req,res,next){ console . log(req . query);console . log(req . query . user);//tester console . log(req . query . pass . a);//123 console . log(req . query . pass . b);//456 RES . end();});app . listen(3000);请求参数

Req.params可以解析复杂路由规则上的属性(req.param结合了req.query和req.param的功能,但是被删除了,不应该使用)

向服务器发送请求http://localhost:3000/123456

//app . jsvar express=require(' express ');var app=express();app.get('/:id ',函数(req,res,next){ console . log(req . params . id);//123456 RES . end();});app . listen(3000);所以不管我在根路径之后输入什么,

将被解析为req.params.id

res.send()

Res.send用于向客户端响应信息,它的优势在于可以智能地处理我们传递的不同类型的参数

app.get('/'),function(req,res,next){ RES . send(' express ');});当参数为字符串时,默认情况下,响应头内容类型设置为文本/html

也就是说,它被解析成html并呈现在我们的页面上

app.get('/'),function(req,RES){ RES . send(200);});当参数为数字时,会自动为我们设置响应体(状态码…)

app.get('/'),function(req,res){ res.send([1,2,3]);});当参数是数组或对象时,它将响应一个JSON

res.redirect()

使用这种方法允许我们重定向网页

例如,使用绝对url跳转到不同的域名

app.get('/',function(req,RES){ RES . redirect(' http://www . Baidu.com ');});重定向()默认响应状态代码是302

您可以将此状态代码更改为res.redirect()的第一个参数

//app . jsvar express=require(' express ');var app=express();app.get('/'),function(req,res){ res.redirect(302,' demo ');});app.get('/demo ',函数(req,RES){ RES . end();});app . listen(3000);在url地址栏中输入http://localhost:3000时,

该页面将被重定向到http://localhost:3000/demo

静态资源

静态资源指的是我们在开发中使用的css、js、img等等

它们需要存储在静态资源目录中

当浏览器发送对非HTML文件的请求时,

服务器将从这个静态资源目录中寻找文件

我们通常在根目录中创建一个公共文件来存储它

并公开创建样式表、javascripts、图像和其他文件夹

用于存储特定类型的资源

上面已经提到了指定静态资源目录的方法

var path=require(' path ');app . use(express . static(path . join(_ _ dirname,' public ')));例如,我们在html中有这样的代码

link href='/JavaScript/jquery . js ' rel=' external nofollow ' rel='样式表' media=' screen ',然后客户端运行并发出请求

服务器会在public的javascripts文件夹中找到jQuery.js静态资源

模板引擎

express框架默认使用ejs和jade渲染模板

以玉为例

使用时一定要下载

Npm安装jade - save,然后指定通过app.set()搜索模板文件的目录(类似于静态资源)

并将模板文件后缀指定为jade

app . set(' view ',path.join(__dirname,' view '));app.set('view engine ',' jade ');(使用原生html代替模板,app.set('view engine ',' html ');)

如果我们想访问模板,应该怎么做?

非常简单,只需要一个res.render()方法

现在我已经编写了一个简单的jade模板(jade语法超出了本文的范围)

//view/index . jade doctype html head title=title link(rel='样式表',href='/样式表/style.css') body h1=title p=内容由res.render呈现。

//app . jsvar express=require(' express ');var path=require(' path ');var app=express();app . use(express . static(path . join(_ _ dirname,' public ')));app . set(' view ',path.join(__dirname,' view '));app.set('view engine ',' jade ');app.get('/',function(req,res){ res.render('index ',{ title: 'Express ',content: '这是个例子' });});app . listen(3000);

res.render()

res.render(视图[,数据][,回调])

用于呈现网页模板

第一个参数是要呈现的模板的名称

第二个参数是传递给模板的变量,它作为一个对象存储,没有什么可以省略

第三个参数是渲染后回调函数,可以省略

途径

路由是指根据不同的路径指定不同的处理方法

我们通常将不同的路由封装到不同的模块中

首先,在根目录下创建一个路由文件夹来存储路由

现在我在routes文件夹下创建了两个路由文件index.js和users.js。

修改app.js

//app . jsvar express=require(' express ');var path=require(' path ');var app=express();var index=require('。/routes/index’);var users=require('。/路由/用户’);app.use('/',index);app.use('/users ',users);app . listen(3000);这意味着http://localhost:3000/的路由被交给index进行处理

http://localhost :3000/用户的路由由用户处理

下面是路由的一个简单实现

//路线/索引。jsvar express=require(' express ');定义变量路由器快递.路由器();router.get('/'),函数(req,RES){ RES . end(' index ');});router.get('/123 ',function(){ RES . end(123);});module.exports=路由器;//路由/用户。jsvar express=require(' express ');定义变量路由器快递.路由器();router.get('/'),function(req,RES){ RES . end(' users ');});module.exports=路由器;通过快递。路由器()创建的路由器就像一个微型汽车版的应用一样

应用能做的路由器都能做

只是我们把逻辑都封装到了各个路由模块中

上面代码的结果:

正文分析器中间件

作为一个入门级文章

最后就来浅显的谈一个中间件正文分析器吧

其实表达在3.x版本中内置了很多中间件

但是4.x版本就将出静电以外的所有中间件全部抽离出来了

所以就需要我们单独安装

对照表如下:

Express 3.0 Express 4.0正文解析器正文解析器压缩压缩饼干-会话记录器mor gan cookieParser cookie-解析器会话快递-会话favicon静态-favicon响应时间响应时间错误处理程序错误处理程序方法-覆盖方法-覆盖超时连接-超时vhost vhost csrf csurf刚才就提到了邮政请求有所不同

不同的地方就在于我们需要正文分析器这个中间件来处理数据

通过请求。正文来获得数据

首先使用前不要忘记下载

NPM安装body-parser-save//app。jsvar express=require(' express ');var body parser=require(' body-parser ');var path=require(' path ');var app=express();app。使用(BodyParser。JSON());app。使用(BodyParser。URL编码({扩展: false });app.get('/',函数(req,RES){ RES . send(' form method=' POST ' action=')./form ' \ input type=' text ' name=' user ' \ input type=' submit ' \/form ');});app.post('/form ',function(req,RES){ console。日志(请求。身体);var user=req。尸体。用户;res.send('账号: '用户);});app。听(3000);下面这四个方法分别用于对身体内容采取不同的处理方法

bodyParser.json(选项)处理JSON数据bodyParser.raw(选项)处理缓冲器数据bodyParser.text(选项)处理文本数据bodyParser.urlencoded(选项)处理UTF-8编码数据这样我首先通过得到请求获取主页面

提交表单向服务器发送邮政请求

服务器响应结果

快速发电机

通过快速发电机应用生成器

可以为我们快速生成项目雏形

在你要生成项目的目录中下载快速发电机

国家预防机制安装快速发电机然后输入

表达项目文件名

这样表达就会把必要的文件夹以及代码快速生成了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:浅谈Node.js轻量级Web框架Express4.x的用户指南是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。