当前位置: 首页 > news >正文

网站建设模块分析电影网站建设步骤

网站建设模块分析,电影网站建设步骤,网站解析域名时间,秦皇岛海三建设集团文章目录 1、Express 应用使用回调函数的参数#xff1a; request 和 response 对象来处理请求和响应的数据。2、Express路由1.路由方法2.路由路径3.路由处理程序 3. 模块化路由4. Express中间件1.中间件简介2.中间件分类3.自定义中间件 1、Express 应用使用回调函数的参数 request 和 response 对象来处理请求和响应的数据。2、Express路由1.路由方法2.路由路径3.路由处理程序 3. 模块化路由4. Express中间件1.中间件简介2.中间件分类3.自定义中间件 1、Express 应用使用回调函数的参数 request 和 response 对象来处理请求和响应的数据。 Request 对象 request 对象表示 HTTP 请求包含了请求查询字符串参数内容HTTP 头部等属性 属性/方法说明app当callback为外部文件时用req.app访问express的实例baseUrl获取路由当前安装的URL路径body/cookies获得「请求主体」/ Cookiesfresh/stale判断请求是否还「新鲜」hostname/ip获取主机名和IP地址originalUrl获取原始请求URLparams获取路由的parameterspath获取请求路径protocol获取协议类型query获取URL的查询参数串route获取当前匹配的路由subdomains获取子域名accepts()检查可接受的请求的文档类型acceptsCharsets/acceptsEncodings/acceptsLanguages返回指定字符集的第一个可接受字符编码get()获取指定的HTTP请求头is()判断请求头Content-Type的MIME类型 Response 对象 response 对象表示 HTTP 响应即在接收到请求时向客户端发送的 HTTP 响应数据 属性/方法说明app当callback为外部文件时用req.app访问express的实例append()追加指定HTTP头set()在res.append()后将重置之前设置的头res.cookie(namevalue [option])设置Cookieopitiondomain / expires / httpOnly / maxAge / path / secure / signedclearCookie()清除Cookiedownload()传送指定路径的文件get()返回指定的HTTP头json()传送JSON响应jsonp()传送JSONP响应location()只设置响应的Location HTTP头不设置状态码或者close responseredirect()设置响应的Location HTTP头并且设置状态码302render(view,[locals],callback)渲染一个view同时向callback传递渲染后的字符串如果在渲染过程中有错误发生next(err)将会被自动调用。callback将会被传入一个可能发生的错误以及渲染后的页面这样就不会自动输出了。send()传送HTTP响应sendFile(path [options] [fn])传送指定路径的文件 -会自动根据文件extension设定Content-Typeset()设置HTTP头传入object可以一次设置多个头status()设置HTTP状态码type()设置Content-Type的MIME类型 2、Express路由 路由是指应用程序的终端节点 URI 如何响应客户端请求。 在Express中路由指的是客户端的请求与服务器处理函数之间的映射关系。 Express中的路由分3部分组成分别是请求的类型、请求的URL地址、处理函数格式如下app.method(path, handler) 1.路由方法 // GET method route app.get(/, function (req, res) {res.send(GET request) })// POST method route app.post(/, function (req, res) {res.send(POST request) })app.all() 用于在所有 HTTP 请求方法的路径上加载中间件函数。 无论是使用 GET、POST、PUT、DELETE 还是 http 模块中支持的任何其他 HTTP 请求方法都会对路由 “/secret” 的请求执行以下处理程序。 app.all(/secret, function (req, res, next) {console.log(all)next() // pass control to the next handler })2.路由路径 路由路径可以是字符串、字符串模式或正则表达式。 // acd和abcd app.get(/ab?cd, function (req, res) {res.send(ab?cd) })总结问号前面字符可有可无 app.get(/ab(cd)?e, function (req, res) {res.send(ab(cd)?e) })总结问号前面括号内的字符可有可无 app.get(/abcd, function (req, res) {res.send(abcd) })总结加号前面字符可无限叠加 app.get(/ab*cd, function (req, res) {res.send(ab*cd) })总结星号前面的字符为开始后边的字符为结束字符中间可以任意字符或数字 app.get(/a/, function (req, res) {res.send(/a/) })总结满足正则/a/的都满足此方法 app.get(/.*fly$/, function (req, res) {res.send(/.*fly$/) })总结满足正则/.*fly$/以fly字符结束的路由 3.路由处理程序 在没有理由继续当前路由时将控制权传递给后续路由。next(‘route’) 路由处理程序可以采用函数、函数数组或两者的组合形式。 单个回调函数可以处理路由。 var express require(express); var app express(); app.get(/abc, function (req, res) {res.send(hello abc); }) app.listen(8081, function () {console.log(服务启动) })多个回调函数可以处理一个路由确保指定对象next(); var express require(express); var app express(); app.get(/abc, function (req, res, next) {console.log(111)next() }, function(req, res) {res.send(hello abc next); }) app.listen(8081, function () {console.log(服务启动) }) 回调函数数组可以处理路由。 var express require(express); var app express(); var a0 function (req, res, next) {console.log(A0)next() } var a1 function (req, res, next) {console.log(A1)next() } var a2 function (req, res) {res.send(Hello from A!) } app.get(/abc, [a0, a1, a2]) app.listen(8081, function () {console.log(服务启动) })独立函数和函数数组的组合可以处理路由。 var express require(express); var app express(); var a1 function (req, res, next) {console.log(A1)next() } var a2 function (req, res) {res.send(Hello from A!) } app.get(/abc, function (req, res, next) {console.log(A0)next() },[a1, a2]) app.listen(8081, function () {console.log(服务启动) })3. 模块化路由 为了方便对路由进行模块化的管理Express不建议将路由直接挂载到app上而是推荐将路由抽离为单独的模块。 将路由抽离为单独模块的步骤如下 1.创建路由模块对应的.js文件 2.调用express.Router()函数创建路由对象 3.向路由对象上挂载具体的路由 4.使用module.exports向外共享路由对象 5.使用app.use()函数注册路由模块 创建路由模块// router.js 文件 var express require(express); // 1.导入express var router express.Router(); // 2.创建路由对象router.get(/login/info, (req, res) { // 3.挂载登录用户信息res.send(Get user list.); }); router.post(/singUp/add, (req, res) { // 4.挂载注册用户的路由res.send(Add new user.); }); module.exports router; // 5.向外导出路由对象注册路由模块const express require(express); const app express(); // 1.导入路由模块 const userRouter require(./router.js); // 2.使用app.use()注册路由模块 app.use(userRouter); app.listen(8081, () {console.log(http://127.0.0.1) })为路由模块添加前缀// 类似于托管静态资源时为静态资源统一挂载访问前缀一样 // 1.导入路由模块 const userRouter require(./router.js); // 2.使用app.use()注册路由模块并添加统一的范围前缀 /api app.use(/api, userRouter);4. Express中间件 1.中间件简介 中间件简介 中间件是一种特殊的路由处理函数它可以在请求到达目标处理函数之前进行一些预处理操作。Express 支持使用中间件来实现各种功能例如身份验证、请求日志记录处理 CORS跨源资源共享等。 注意中间件函数的形参列表中必须包含next参数而路由处理函数中只包含req和res。 next函数是实现多个中间件连续调用的关键它表示把流转关系转交给下一个中间件或路由。 可以使用app.use()连续定义多个全局中间件。客户端请求到达服务器之后会按照中间件定义的先后顺序依次进行调用const express require(express); const app express(); // 一个简单的中间件 app.use((req, res, next) {console.log(Request received at ${new Date()});next(); // 将控制权传递给下一个中间件或路由处理器 }); // 一个路由处理器用于处理 GET 请求 app.get(/, (req, res) {res.send(Hello, World!); });// 启动服务器 app.listen(8081, () {console.log(Server is running on port 8081); });局部中间件 不使用app.use()定义的中间件叫做局部生效的中间件 中间件只在当前路由中生效var express require(express); var app express();var myLogger function (req, res, next) {console.log(LOGGED)next() } app.get(/, myLogger, function (req, res) {res.send(Hello World!) })中间件的5个使用注意事项 一定要在路由之前注册中间件客户端发送过来的请求可以连续调用多个中间件进行处理执行完中间件的业务代码之后不要忘记调用next()函数为了防止代码逻辑混乱调用next()函数后不要再写额外的代码连续调用多个中间件时多个中间件之间共享req和res对象 监听 req 的 data 事件 在中间件中需要监听req对象的data事件来获取客户端发送到服务器的数据。 如果数据量比较大无法一次性发送完毕则客户端会把数据切割后分批发送到服务器。所以data事件可能会触发多次每一次触发data事件时获取到数据只是完整数据的一部分需要手动对接收到的数据进行拼接。// 定义变量用来储存客户端发送过来的请求体数据 let str // 监听 req 对象的 data 事件客户端发送过来的新的请求体数据 req.on(data,(data) {// 打印请求数据console.log(data) })监听 req 的 end 事件 当请求体数据接收完毕之后会自动触发req的end 事件。 可以在req的end 事件中拿到并处理完整的请求体数据。// 监听 req 对象的 end 事件请求体发送完毕后自动触发 req.on(end,() {// 打印完整的请求体数据console.log(str)// TODO: 业务逻辑// ....... })2.中间件分类 应用程序级中间件 通过app.use()或app.get()或 app.post()绑定到app实例上的中间件叫做应用级别的中间件var app express(); var myLogger function (req, res, next) {console.log(LOGGED)next() } // 应用级别的中间件(全局中间件) app.use((req, res, next) {req.name routerreq.on(end,() {console.log(end)})next(); }); // 应用级别的中间件(局部中间件) app.get(/, myLogger, (req, res) {console.log(req.name)res.send(Home page.) }); app.listen(8081, function () {console.log(服务启动) })路由器级中间件 绑定到express.Router()实例上的中间件叫做路由级别的中间件。它的用法和应用级别中间件没有任何区别。只不过应用级别中间件是绑定到 app实例上路由级别中绚件摸定到router 实例上var express require(express) var app express() var router express.Router() router.use(function (req, res, next) {console.log(Time, Date.now());next() }) app.use(/, router) app.listen(8081, function () {console.log(服务启动) })错误处理中间件 错误处理中间件是专门用来捕获整个项目中发生的异常错误从而防止项目异常崩溃的问题。 格式错误级别的中间件的 function 处理函数中必须有 4 个形参形参顺序从前到后分别是(err,req,res,next)。 注意错误级别的中间件必须注册在所有路由之后app.get(/, (req, res) { // 1.路由throw new Error(服务器内部发生了错误); // 1.1.抛出一个自定义的错误res.send(Home Page.); }); app.use((err, req, res, next) { // 2.错误级别的中间件console.log(发生了错误 err.message); // 2.1.在服务器打印错误消息res.send(Erroe err.message); // 2.2.向客户端响应错误相关的内容 });内置中间件 三个内置的中间件分别是 express.static 是快速托管静态资源的内置中间件 例如:HTML文件、图片、CSS样式等无兼容性 express.json是拿来解析json格式数据的 express.urlencoded是拿来解析urlencoded格式数据的var express require(express); var app express(); // 注意这是中间件 所以必须配置到路由之前 app.use(express.json()) app.use(express.urlencoded({extended : false})) app.listen(8081, function () {console.log(服务启动) })第三方中间件 非Express官方内置的而是由第三方开发出来的中间件叫做第三方中间件。在项目中大家可以按需下载并配置第三方中间件从而提高项目的开发效率。 安装所需功能的 Node.js 模块然后在应用程序级别或路由器级别将其加载到应用程序中。 以cookie-parser为示例$ npm install cookie-parservar express require(express) var app express() var cookieParser require(cookie-parser) app.use(cookieParser())3.自定义中间件 自定义中间件步骤 定义中间件监听req的data事件监听req的end事件使用querystring模块解析请求体数据将解析出来的数据对象挂载为req.body将自定义中间件封装为模块// myparse.js //1.1 导入内置模块 const qsrequire(querystring) //1.2 编写解析函数 function myparse(req,res,next){//2.2 定义一个变量存储客户端字符串let str//2.1 对客户端请求数据的监听//注意是对客户端对象进行监听而不是服务器req.on(data,(chunk){strchunk})//2.4 进行发送数据结束的监听req.on(end,(){//倘若有响应说明数据发送结束我们已经拿到所有数据console.log(str)//4.2 利用内置模块的parser()进行数据解析const bodyqs.parse(str)//4.3 进行数据对象的挂载req.bodybodyconsole.log(body)})//2.5 不要忘记需要调用next函数next() } //1.4 通过module.exports暴露 module.exports myparse// 使用 var express require(express); var app express(); // 2.1 导入自定义解析模块 const myparse require(./mybody-parse) app.use(myparse) app.get(/login, function (req, res) {console.log(req.body);res.end(req.body); })
http://www.hkea.cn/news/14544270/

相关文章:

  • 什么网站可以做头像注册安全工程师考试时间
  • 福田企业网站优化排名上海兼职网站制作
  • 网站建设功能点价格移动官网网站建设
  • icp备案通过了 怎么修改我的网站wordpress 页面 权限
  • 东莞专业微网站建设word+没有安装wordpress
  • 网站建设技术做购物网站用什么应用
  • 培训网站搭建新媒体营销中常见的知识问答平台有
  • 建网站需要哪些步骤沈阳建站价格
  • 做视频网站程序多少钱网站logo修改
  • 天津有哪些有名的网站建设公司仿站定制模板建站
  • 转入已备案网站本地安装wordpress
  • 设计学习网站怎么建设自己淘宝网站首页
  • 贵阳网站设计模板渠道分销管理系统
  • 广网站建设新闻源软文推广平台
  • 公司网站宣传设计有没有做旅游攻略的网站
  • 黑龙江建设兵团知青网站福安做网站
  • 昆明酒店网站建设苏州网络推广软件
  • 成都创新网站建设领导高度重视门户网站建设
  • 山西免费网站制作临沂网站建设设计公司
  • 网站开发及app开发报价单wordpress 实名
  • 福州网站设计软件南京模板网站开发
  • 青岛西海岸新区建设网站毕业设计做购物网站
  • 网站建设 定制网站模板 婴儿
  • 成都建设银行合作装修网站浙江东南网架公司
  • 官网建站合作模版哔哩哔哩网页版搜索不了
  • 汝州市住房和城乡规划建设局网站网络服务费会计分录
  • 凡科做网站关键词最简单的出入库管理软件
  • 怎么免费做网站不要域名vue怎么做网站
  • 全国建设市场公共服务网站wordpress动静分离oss
  • 兼职建设网站公众号登录入口在哪