Express框架简介、express使用模块引擎、模式数据

Express简介:

原生的http不足以应对我们的开发需求,所以我们需要使用框架来加快我们的开发,这里推荐expressjs,其官网:expressjs.com,中文文档推荐:http://javascript.ruanyifeng.com/nodejs/express.html#toc0

Express是目前最流行的基于Node.js的Web开发框架,可以快速地搭建一个完整功能的网站。

Express上手非常简单,如下简介:

	// 1.安装express:npm install express --save(使用淘宝镜像安装的:npm --registry https://registry.npm.taobao.org install express)// 2.引包:var express = require('express');// 3.创建服务器应用程序:(类似原生中createServer)var app = express();// 4.业务设计(路由设计):// 以get的方式对一个路径作出处理,这也是路由。get中第一个参数为访问路径,第个为回调函数(回调函数第一个参数为请求对象,第二个为响应对象):这样的路由可以指定多个。app.get('/', function(req, res) {res.send('index.html');//响应浏览器访问,类似原生中end();req.files;//}).get('/users', function(req, res) {//这里类似jQuery中的链式调用res.send('users.html');});// 以post的方式对一个路径作出处理,这也是路由。post中第一个参数为访问路径,第个为回调函数(回调函数第一个参数为请求对象,第二个为响应对象):这样的路由可以指定多个。app.post('/login', function(req, res) {res.send('login.html');res.redirect(301, "/index.html");//网页重定向,第一个参数可以省略,为状态码;第二个参数是重定向的路径,这里可以写网址或相对文件路径。res.sendFile("/faded.mp3");//用于发送文件(各种类型文件)res.render("index", { message: "Hello World" });//用于渲染网页模板,第一各参数为模板;第二个参数对象为模板中需要的变量及值。});app.listen(3000,function(){console.log(running...);});//设定监听端口,回调函数可以省略,表示应用启动成功后作出反应。

express-中间件:

处理http请求的函数被称为中间件,每个中间件可以接收三个参数(请求对象、响应对象、next回调函数代表下一个中间件);如:

	 function middleware(req, res, next) {next('出错了!');//next如果传入了参数,那么这个参数代表抛出一个错误;如果这里不调用next,那么下面的中间件将不再执行。};

express-use:

use()方法用于注册中间件,如:

	app.use(function(request,response,next){console.log(request.url);response.end('hello');});//利用use开放资源:将资源开放后,可以通过url访问到此资源,如:app.use('/public/',express.static('./public/'));//第一个参数是别名,建议和后面的开放资源的URL一样,也可以省略,省略后直接访问public中的文件即可,不用再访问public此文件夹路径,/后面跟被开放的URL目录中的文件名,

express-set:

set方法用于设置变量的值,如:

app.set('avator',_dirname + '/avator');//第一个参数是变量名,第二个参数是变量的值。

router路由模块:

	// 在入口app执行node代码的情况下,路由模块载入可以使用函数传参数app的方式:不推荐方式,不合理,如:module.exports = function (apps) {apps.get('/students', function (req, res) {// readFile 的第二个参数是可选的,传入 utf8 就是告诉它把读取到的文件直接按照 utf8 编码转成我们能认识的字符 , 除了这样来转换之外,也可以通过 data.toString() 的方式fs.readFile('./db.json', 'utf8', function (err, data) {if (err) {return res.status(500).send('Server error.')}// 从文件中读取到的数据一定是字符串 ,所以这里一定要手动转成对象var students = JSON.parse(data).students;res.render('index.html', {fruits: ['苹果','香蕉','橘子'],students: students})})})// 推荐方式:express提供了专门的路由设计的模块:Router(),在载入express模块的情况下使用方法如下:// 1.创建一个路由容器:var router = express.Router();// 2.把路由挂载到路由容器中:router.get('/public', function(request, response) {});router.post('/public', function(request, response) {});// 3.导出router:module.exports = router;// 4.在入口app中载入Router模块:var router = require('./router');// 5.把router挂载到app中:app.use(router);

path模块:

	var path = require('path');// path是一个核心模块,简单介绍常用API:path.basename('C:/e/fs/f/index.html') //'index.html'-----返回的是一个目录中的文件名及后缀名path.basename('C:/e/fs/f/index.html', '.html') //'index'-----basename可以传入第二个参数(.文件后缀名),此时返回的仅是文件名,不包括后缀名path.dirname('C:/e/fs/f/index.html') //'C:/e/fs/f'------获取路径中文件的目录,不包括文件名及后缀名path.extname('C:/e/fs/f/index.html') //'.html'-------获取路径中文件的扩展名(后缀名)path.isAbsolute('C:/e/fs/f/index.html') //true -----判断一个路径是否为绝对路径path.isAbsolute('/e/fs/f/index.html') //true------ / 开头表示的是文件磁盘根目录,所以是绝对路径path.isAbsolute('./e/fs/f/index.html') //false------ ./ 开头表示的是文件当前目录,所以不是绝对路径,为相对路径// 拆分一个路径的API:path.parse():path.parse('C:/e/fs/f/index.html') //解析得到一个对象:// {//     root: 'C:/',//     dir: 'C:/e/fs/f',//     base: 'index.html',//     ext: '.html',//     name: 'index'// }path.join('./a', 'b') //'a\\b'-----路径拼接,实际是a/b,解决路径字符串拼接的难题,两个反斜杠是操作系统导致的,

body-parser中间件:

默认是不能解析post方式提交的请求体的,body-parser中间件(插件)专门用来解析表单 POST 请求体,其用法如下:

	//1.下载安装body-parser插件:npm install body-parser --save//2.引入body-parser模块:var bodyParser = require('body-parser');//3.配置body-parser核心部分:app.use(bodyParser.urlencoded({extended: false}));// parse application/x-www-form-urlencoded,解析post请求数据app.use(bodyParser.json());// parse application/json,数据为JSON类型//4.接收以post提交的数据:app.post('/post',function(request,response){console.log(request.body);//request.query只能拿到以get方式提交的数据;配置完后require会有一个新的body属性,这个属性request.body可以拿到以post提交的数据});

也可以使用暂存请求体的方式接受post提交数据,如:

	 var http = require('http');var querystring = require('querystring');var util = require('util');http.createServer(function(request, response) {// 定义了一个post变量,用于暂存请求体的信息var post = '';// 通过request的data事件监听函数,每当接受到请求体的数据,就累加到post变量中request.on('data', function(chunk) {post += chunk;});// 在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。request.on('end', function() {post = querystring.parse(post);response.end(util.inspect(post));});}).listen(3000, function() {console.log('running...');});

express中使用art-template模板:

art-template模板也可在node中使用,其具基本用法如下:

	 var express = require('express');var app = express();//在Express中配置使用art-template的步骤:// 1.在github上搜索art-template打开官方文档,官方文档导航栏中有Express点进去查阅相关说明,步骤如下一步:// 2.分别安装art-template和express-art-template:打开命令窗口分别键入命令:npm install --save art-template  和 npm install --save express-art-template ;(当然这里可以同时安装两个包,键入命令:npm install --save art-template express-art-template);express-art-template是专门在express中把art-template整合到express中的包,原因是express-art-template依赖了art-template。// 3.配置使用art-template模板引擎:app.engine('html', require('express-art-template')); //第一个参数表示渲染以 .art 结尾的文件的时候使用 art-template 模板引擎,注意需要渲染的页面文件后缀名修改为art,当然不也可以修改 app.engine() 中第一个参数值为html,这样就不用再修改文件后缀名// 4.渲染数据到模板引擎(使用):app.get('/', function(require, response) {response.render('index.html', { //Express 为 Response 相应对象提供了一个方法:render,render 方法默认是不可以使用,但是如果配置了模板引擎就可以使用了,其用法:res.render('html模板名', {模板数据})name: 'jkon',//render 第一个参数不能写路径,默认会找view目录中的模板文件(express约定开发人员把所有视图文件放到view目录中),如果想要修改默认view目录,使用 app.set('view','新的路径'):message: 'hello word',dateTime: '2020-11-7'}); //注意需要渲染的页面文件后缀名修改为art,当然不也可以修改 app.engine() 中第一个参数值为html,这样就不用再修改文件后缀名});

art-template中子模板和继承模板:

	<!-- 在node中有很多第三方模板,不同的模板语法不同,其他模板如:ejs、jade(pug)、handlebars、nunjucks --><!-- 子模板的使用:在界面需要填充公共内容的地方直接插入公共代码:{{ include './header.html'}}   ,插入的是相同的区域。 -->{{ include './header.html'}}<!-- 模板继承:在一个界面中,公共部分非常多,不同的部分只有一点,可以通过改变不同部分区域来实现,和上面子模板差不多,只是插入的是不同区域。 --><!-- 要继承的界面:  -->{{ block 'content'}}<!-- <p>默认内容</p> ,如果在新的页面没有修改这里,则默认渲染此模板中的默认内容和此坑以外的界面,如果需要修改默认内容,则需在新的页面使用block并修改其中的默认部分-->{{ /block }}<!-- 新的页面: --><!-- 在新的页面渲染继承的界面,默认内容 + 继承页面坑以外的内容 -->{{ extend './conent.html'}}<!-- 默认内容被修改了 -->{{ block 'content'}}<!-- <div>这是修改后新的内容 + 继承页面坑以外的内容</div> -->{{ /block }}

express中使用cookie和session:

在express中默认是不支持Session和Cookie, 但是我们可以使用第三方中间件: express - session, 使用步骤如下:

	// 1.下载安装:// 在cmd中npm install express-session// 2.引包:var Session = require('express-session');// 3.配置:app.use(session({secret: 'keyboard cat', //配置加密字符串,在原有的字符串上拼接,增加安全性,括号里的字符自定义resave: false,saveUninitialized: true //无论是否使用session,都会分配一把钥匙,当值为false时,默认是不会分配钥匙,需要自己设置。}));// 4.使用:当配置好插件后,可以通过require.session来访问和设置Session成员:添加:require.session.foo = 'bar' ;访问:require.sessionapp.use(function(require, response, next) {if (!require.session.login) {require.session.login = {};};});

express中的中间件:

	var express = require('express');var app = express();// 中间件:处理请求的,本质就是一个函数,这个函数有三个形参,repuest----请求结果,response----响应结果,next-----下一个,调用下一个中间件的参数。// express中的中间件有几种分类:// 1.任何请求都会进入型(不关心请求方法和请求路劲),如:app.use(function(repuest,response,next){console.log('test')next();//---------------------------------如果不调用此下一个中间件,是不会继续向下一个中间件执行的,当有多个中间件时,必须调用下一个才会执行下一个,当然next也是调用匹配条件的。// next(err);next可以传递参数,如果传递了参数,当发生错误的时候,则直接往后找到带有 四个参数的应用程序级别中间件,可以用来处理全局错误。});app.use(function(repuest,response,next){console.log('test')});// 2.关心请求路径型,以/x开头的路径都会进来,必须是以/x 开头 ,强调‘开头’如:app.use('/a',function(repuest,response,next){console.log('test')});// 3.get和post是严格模式的,表示以/a为请求时才执行里面的代码。app.get('/a',function(repuest,response,next){console.log('test')});app.post('/a',function(repuest,response,next){console.log('test')});// 四个参数的中间件:app.use(function(error,require,response,next){res.status(500).send('This is error')});

mock模拟数据:模拟数据接口的数据,提高前端开发效率,实际就是一个json文件,不同router定义不同意义的接口。

提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
笔者:苦海

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库字段关联更新

MS SQL Server 子查询更新&#xff1a; update log set uin b.uin from log a,logs b where a.accountuin b.accountuin mysql 更新&#xff1a; update t_stat_month_user a INNER JOIN t_dept b on a.op_deptb.op_id set a.dept_short_nameb.dept_short_name;转载于:https:/…

浏览器基础知识

Web浏览器的主要功能是展示网页资源&#xff0c;即请求服务器并将结果展示在窗口中。工作原理大概如下&#xff1a; 地址栏输入URL 浏览器根据输入的URL查找域名的IP地址&#xff0c;DNS查找过程如下&#xff1a; 浏览器缓存——浏览器会缓存DNS记录一段时间&#xff0c;不同浏…

MongoDB简介、在node中使用MongoDB

MongoDB数据库简介&#xff1a; 使用MongoDB的好处是不用SQL语句&#xff0c;它提供了对应的API&#xff0c;其功能和MYSQL基本相同&#xff0c;是最像关系型数据库的非关系型数据库&#xff1b;不需要设计表的结构&#xff0c;文档相当于json&#xff0c;如果想要了解更多&am…

喜用神最正确的算法_各种电磁仿真算法的优缺点和适用范围(FDTD, FEM和MOM等)...

从实际工程应用的角度谈一下我对这几种算法的理解。先说结论&#xff0c;FDTD算的快但是不精确&#xff0c;可以用来算电大尺寸的物体&#xff0c;要是一个物体的尺寸大于10个波长&#xff0c;一般的服务站是跑不动FEM的&#xff0c;那必须得用FDTD了。FEM最经典的电磁仿真软件…

Linux下实现自动设置SSH代理

SSH的巨大价值体现在能够配置为代理服务器上。不像在Windows下每次还需要手动登录设置&#xff0c;Linux有很好的工具链能够实现自动设置SSH代理&#xff0c;就是expect和ssh的联合使用&#xff0c;再加上proxychains&#xff0c;任何程序都可以享用代理了&#xff0c;在此我简…

node中操作MySQL

node操作MySQL数据库&#xff1a; 在node中操作MySQL数据库的基本流程如下&#xff1a; // node操作MySQL需要在npm官网下载mysql包并载入node执行代码&#xff1a;// 1.载入MySQL数据库包var mysql require(mysql);// 2.创建连接&#xff1a;var connection mysql.createCo…

百度UEditor编辑器使用(二)

本文摘自&#xff1a;http://www.cnblogs.com/pmpen/archive/2011/09/19/2181811.html 首先感谢分享 百度WEB前端设计部推出一款开源的编辑器UEditor http://ueditor.baidu.com/index.html &#xff0c;这款编辑器相当强大&#xff0c;它提供了百度地图&#xff0c;google地图…

护士资格证延续注册WEB服务调用失败_服务熔断

熔断机制是应对服务雪崩效应的一种微服务链路保护机制&#xff0c;当扇出链路的某个微服务不可用或者响应时间太长时&#xff0c;会进行服务的降级&#xff0c;进而熔断该节点微服务的调用&#xff0c;快速返回”错误”的响应信息。当检测到该节点微服务响应正常后恢复调用链路…

AssetManager asset的使用

Android 系统为每一个新设计的程序提供了/assets文件夹&#xff0c;这个文件夹保存的文件能够打包在程序里。/res 和/assets的不同点是&#xff0c;android不为/assets下的文件生成ID。假设使用/assets下的文件&#xff0c;须要指定文件的路径和文件名称。以下这个样例&#xf…

vmware 快照用关机吗_PS板绘上色的骚操作,打破初学者上色残的瓶颈!|快照|绘画|初学者|配色|色阶...

PS板绘上色的骚操作&#xff0c;打破初学者上色残的瓶颈&#xff01;初学者如何入门绘画&#xff1f;学习板画难吗&#xff1f;怎样才能学习好绘画&#xff1f;想必这些都是绘画初学者们经常在想的问题吧&#xff0c;就是不知道如何才能学习好绘画&#xff0c;然后绘画出自己想…

vue概述、vue文件特点、vue核心思想、双向数据流、单文件、启动一个vue项目、声明式渲染

vue介绍&#xff1a; Vue&#xff1a;当前较火的MVVM框架&#xff0c;轻量、简介、高效、组件化、数据驱动&#xff0c;模块和渲染函数的弹性选择&#xff0c;简单的语法及项目创建&#xff0c;渲染速度极快&#xff0c;基于Virtual Dom&#xff0c;利用虚拟DOM实现快速渲染&a…

jQuery特效手风琴特效 手写手风琴网页特效

今天写一个简单的手风琴效果&#xff0c;不用插件&#xff0c;利用强大的jQuery&#xff0c;写一个手风琴效果。 页面预览&#xff0c;请点击这里预览&#xff1a; 手风琴预览案例分析&#xff1a; html结构 就是一个大盒子里面放着5个li&#xff0c;每个li的小小是200像素&a…

db2 删除索引_MYSQL进阶——索引

索引模型hash索引hash索引主要适用于等值查询的场景&#xff0c;排序&#xff0c;模糊搜索等场景并不适用有序数组有序数组可用于非等值查询&#xff0c;排序等场景&#xff0c;但是由于写数据时需要对数组中的元素进行位移&#xff0c;所以一般用于静态数据的场景二叉树二叉树…

javascript中es6语法

es6语法简介&#xff1a; // 1.历史&#xff1a;// 1995-----JavaScript诞生// 1997-----ECMAScript标准确立// 1999-----ES3出现&#xff0c;与此同时IE5风靡一时// 2009-----ES5出现&#xff0c;现在绝大所数使用的是ES5// 2015-----ES6/ECMAScript2015出现// 2.函数的Rest参…

react 导航条选中颜色_调整安卓手机的颜色以更好地查看一切

并非所有人都有相同的区分颜色的能力。我们对屏幕上色彩配置的需求甚至口味可能会因人而异。幸运的是&#xff0c;Android为我们提供了多种本地工具&#xff0c;能够调整手机的颜色。我们的手机显示数百万种音调&#xff0c;这些音调是由屏幕配置或终端如何解释从某些应用程序接…

vue项目目录结构分析、过滤器、vue文件中基础template、script、style

项目目录结构&#xff1a; 1.在一个项目中一般的目录结构为&#xff1a;my_project------------项目文件夹|____src--------------------------------存放人可以看懂的源代码&#xff0c;具备一定功能划分&#xff0c;mvc思想|____dist-------------------------------存放真实…

linux进程调度之 FIFO 和 RR 调度策略

转载 http://blog.chinaunix.net/uid-24774106-id-3379478.html linux进程调度之 FIFO 和 RR 调度策略 2012-10-19 18:16:43分类&#xff1a; LINUX 作者&#xff1a;manuscola.beangmail.com 博客地址&#xff1a;bean.blog.chinaunix.net 最近花了10几天的时间&#xff0…

echarts 获取点击的y轴数值_有机磷酸催化对醌的不对称直接加成反应合成轴手性芳基醌类化合物...

有机磷酸催化对醌的不对称直接加成反应合成轴手性芳基醌类化合物本文作者&#xff1a;Summer轴手性联芳基二醇骨架广泛存在于天然产物、生物活性分子、有用的手性配体以及催化剂中(Figure 1a)&#xff0c;因此&#xff0c;轴手性联芳基二醇化合物的合成受到广泛关注且已经取得了…

vue中自定义指令、组件化、生命周期、节流和防抖、获取DOM、mint-ui简介、过渡和动画

自定义指令&#xff1a; vue中通过directive方法自定义指令&#xff0c;如&#xff1a;自定义一个v-focus指令&#xff1a; <script>Vue.directive(focus, {//通过directive(指令名,{配置})注册全局指令inserted: function (el) {//inserted:表示当自定义指令插入元素后…

H264解码的一个測试程序

网上看到的一个H264视频格式的解码測试程序&#xff0c;能够用来參考其逻辑流程。 代码例如以下&#xff1a; Test_Display_H264(){ in_fd open(H264_INPUT_FILE, O_RDONLY); //video file open fstat(in_fd, &s); …