最近忙成狗了,很少挤出时间来学习,大部分时间都在加班测需求,今天在测一个需求的时候,需要对比数据同步后的数据是否正确,因此需要用到json对比差异,这里使用deepdiff。...一般是用deepdiff进行对比的时候,常见的对比是对比单个的json对象,这个时候如果某个字段的结果有差异时,可以使用exclude_paths选项去指定要忽略的字段内容,可以看下面的案例进行学习:...上面的代码是一般单条数据对比的情况。...从上图可以看出,此时对比列表元素的话,除非自己一个个去指定要排除哪个索引下的字段,不过这样当列表的数据比较多的时候,这样写起来就很不方便,代码可读性也很差,之前找到过一个用法,后来好久没用,有点忘了,今晚又去翻以前写过的代码记录...这里对比还遇到一个问题,等回头解决了再分享: 就这种值一样,类型不一样的,要想办法排除掉。要是小伙伴有好的方法,欢迎指导指导我。
)定义的,router代表一个由express.Router()创建的对象,在路由对象中可定义多个路由规则,而当我们的路由只有一条规则时,可直接用一个回调作为简写,也可直接使用app.get( ) 或app.post...中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)), 和 web 应用中处于请求-响应循环流程中的中间件...中间件的功能包括: (1). 执行任何代码。 (2). 修改请求和响应对象。 (3). 终结请求-响应循环。 (4). 调用堆栈中的下一个中间件。...模板引擎jade的使用 jade是nodejs的模板引擎,它的特点是破坏式,并且强依赖,它省略了html中尖括号,采用了严格的缩进格式,划分了层次结构,提高了可阅读性。...模板引擎ejs的使用 EJS是一个JavaScript模板库,用来从JSON数据中生成HTML字符串,它俱有缓存功能,能够缓存已经解析好的html模版,相比jade你可以更容易地通过EJS模板代码看懂你的代码
转化,在node中使用ES6模块化批量导出可输出多次 * `exports.属性1 = 值1` * `exports.属性2 = 值2` * 导出的都是属性,可导出任何类型的值 * 但导入的只是对象,通过对象的属性执行默认导出只输出一次...* 批量导出,引入的都是对象 * 引入对象:`const module = require("路径")` * 按需使用,引入对象身上的属性 * `const module = require...(json) // 返回json res.status(404).send() // 返回状态和信息 res.jsonp(响应数据) // 调用请求时的回调函数并传递响应数据 res.sendFile...服务端收到请求,去库验证用户名与密码 验证成功后,服务端种一个cookie或发一个字符到客户端,同时服务器保留一份session 客户端收到 响应 以后可以把收到的字符存到cookie 客户端每次向服务端请求资源的...html被称为前端渲染,而后端渲染是后端把json与html结合渲染好后返回到浏览器,没前端什么事了 模板引擎 * 无论前后谁来渲染页面,都会用到模板引擎,前端渲染页面实际上是 **操作dom** ,后端渲染页面是
该方法接受一个callback函数,函数的两个参数分别是 req (http.IncomingMessage 对象)和一个res(http.ServerResponse 对像)。...但是我们有时候也需要从nodejs后端服务中调用第三方应用的http接口,下面的例子将会展示如何使用nodejs来调用http服务。...因为res的on data事件是在服务器获得http请求头的时候触发的,这个时候请求的正文可能还没有传输完成,换句话说,请求回调中的request是一个流对象。...; }); 上面的请求会经过cb0,cb1和自定义的两个function,最终结束。.../views’) view engine, 模板引擎,比如:app.set(‘view engine’, ‘jade’) 在 views 目录下生成名为 index.jade 的 Jade 模板文件
该方法接受一个callback函数,函数的两个参数分别是 req (http.IncomingMessage 对象)和一个res(http.ServerResponse 对像)。...但是我们有时候也需要从nodejs后端服务中调用第三方应用的http接口,下面的例子将会展示如何使用nodejs来调用http服务。...因为res的on data事件是在服务器获得http请求头的时候触发的,这个时候请求的正文可能还没有传输完成,换句话说,请求回调中的request是一个流对象。...; }); 上面的请求会经过cb0,cb1和自定义的两个function,最终结束。.../views’) view engine, 模板引擎,比如: app.set(‘view engine’, ‘jade’) 在 views 目录下生成名为 index.jade 的 Jade 模板文件,
或者connect-multiparty来获取post数据 body-parser Express中默认都使用body-parser作为请求体解析post数据,这个模块也能解析:JSON、Raw、文本、...应用层中间件 应用层中间件绑定到app对象使用app.use和app.METHOD()-需要处理http请求的方法,例如GET、PUT、POST,将之前的get或者post替换为use就行。...三、多个二级域名共享cookie 只需要增加res.cookie中option对象的值,即可实现对相应路由下多个二级路由的cookie进行共享,代码如下: const express=require("...jade模板引擎 安装jade: npm install jade --save 在程序中引入jade: app.set('views', path.join(__dirname, 'views'));...app.set('views',"public"); //设置视图的对应目录 app.set("view engine","jade"); //设置默认的模板引擎 app.engine('jade'
随着功能不断地迭代还有系统不断地壮大,前端纯html+jquery+ajax的问题也暴露出来了: 前端代码越来越大,复用性越来越差。...经过这些考虑,我决定采用NodeJS+ExpressJS+AngularJS(扩展HTML标签,动态HTML)+Jade(前端模板引擎,2016年4月已改名为PUG,但是改名后的版本还有问题,所以我们还是用...Jade)+LESS(CSS面向对象化框架)+Yeoman(包括yo,bower和grunt的工具)+bower(前端库依赖管理,相当于maven)+Grunt(发布工具)的前端开发框架,来改造现有的前端...模板引擎这里选择Jade,CSS渲染选择LESS。之后确认: ?...文件移动到public下,同时修改app.js中的jade view路径。
路由:地球人都知道,负责寻址的。比如用户发送了个http请求,该定位到哪个资源,就是路由说了算。 模板引擎:负责视图动态渲染。下面会介绍相关配置,以及如何开发自己的模板引擎。...,我们都会听到一句话:一切皆对象。...而在学习express的过程中,很深的一个感受就是:一切皆中间件。比如常见的请求参数解析、cookie解析、gzip等,都可以通过中间件来完成。...有两个关于模版引擎的配置: views:模版文件放在哪里,默认是在项目根目录下。...其中 engineExt:模板文件后缀名。比如jade。
HTML 模板是一种允许我们创建基本 HTML 结构并使用占位符根据从 JSON 文件或数据库中检索到的数据动态生成内容的技术。...现在,如果我们要从 JSON 文件中添加或删除任何产品,我们将如何在前端动态更新相应的卡片? 考虑到我们基于内容的数据存储在 JSON 文件中,我们可以继续从现有的 HTML 代码创建可重用的模板。...当用户请求 URL 时,代码会同步读取相关模板文件(或者template-overview.html或template-card.html),用 JSON 文件中的内容动态填充它,并将相关内容作为响应发回给用户...首先,读取两个 HTML 模板文件和存储在 JSON 文件中的产品数据 其次,定义一个函数,用特定于产品的数据替换模板中的占位符。...HTML 模板的好处 HTML 模板提供了几个好处,使其成为 Web 开发人员的热门选择: 通过使用 HTML 模板,我们将内容与表示分离,允许开发人员生成可重复使用的模板,这些模板可以处理来自多个来源的不同数量的数据
第一步:引入express等需要用到的模块express,jade等模块都需要自己手动使用npm命令在控制台安装,如npm install express。在这里用的是jade模板引擎。...开始编写html代码(因为使用的jade模板引擎,所以按照jade语法编写)主要是表单提交,关于样式代码就不解释了。...并把后台的get 请求代码附上 (文件demo.jade) div.con form.loginForm(method = "post",enctype="multipart/form-data"...files参数也是一个对象,他包含了文件的所有信息 ?...JSON.parse用于从一个字符串中解析出json对象JSON.stringify则相反 通过originalFilename获取文件的原始名,最后将文件信息存到数据库。
.├── package.json // 项目配置文件├── package-lock.json // 锁定的项目配置文件├── public //静态资源目录│ ├── images // 图片资源...// 错误页面 ├── index.jade // 首页 └── layout.jade // 公共页面模板jade上文中可以看到,页面目录下views下有3个页面文件,index.jade...初次接触jade这样的拓展名文件不太熟悉,为了使用大家熟悉的html结构,通常在项目实际开发过程中会将其更换成便于理解的模板引擎,比如 art-templatejade 语法不做过多讲解,详细请看文档更换模板引擎...网页上的内荣一般都是根据后台返回的数据动态变化的,这就需要将数据渲染到页面上在Express 中将数据渲染到页面上的方法是 response对象的render方法的第二个参数router.get('/'...页面中传入一个 值为Express 的 title字段,页面上可以直接使用这个字段替换掉原来的显示内容{{title}}看是不是有点像 vue 中页面数据展示的写法另外可还可以多一些参数如
我们回到桌面 你将看到一个APIServer目录 我在这里使用Sublime Text打开 /bin:用来启动应用(服务器) /public: 存放静态资源目录 /routes:路由用于确定应用程序如何响应对特定端点的客户机请求...,包含一个 URI(或路径)和一个特定的 HTTP 请求方法(GET、POST 等)。...每个路由可以具有一个或多个处理程序函数,这些函数在路由匹配时执行。.../views: 模板文件所在目录 文件格式为.jade 目录app.js程序main文件 这个是服务器启动的入口 二 启动服务器 首先启动服务器 1.cd APIServer //进入项目根目录 2...'); ///=======模板 结束===========// 当我们在浏览器中 访问 http://localhost:3000/ 调用的就是index中的接口 我们打开index.js就可以看到该接口的定义
通过使用 Express 可以实现用中间件来响应 HTTP 请求,通过路由来定义不同请求的响应函数,还可以使用模板引擎来输出 HTML 页面。...在 Express 中,中间件会被 Express 传入3个参数: 1)req:请求数据对象 Request; 2)res:返回数据对象 Response; 3)next:下一步函数。...1.4 Express 页面 1.4.1 更换模板引擎 Express 默认的模板引擎是 jade,我们可以把它替换成更简洁、高效的 art-template。...2)Request.query 属性:获取 GET 请求参数 获取 GET 请求参数,它是一个对象,包含路由中每个查询字符串参数的属性,如果没有查询字符串,则为空对象。...() 方法:返回 JSON 格式的数据 只接收一个参数,可以是任意的 JSON 格式类型,包括对象、数组、字符串、布尔值和数字,甚至可以将其他值转换为 JSON 格式类型: res.json(null)
拥有两个版本,无依赖的独立版和react版本。除了Dom对象,也可监听Canvas内元素的手势。...Jade Language:http://jade-lang.com/ Node模版引擎,是Express框架内置的模版引擎。中文版的教程可以看这篇Jade模板。...数据Mock Mock.js:http://mockjs.com/ 是一款前端开发中拦截Ajax请求再生成随机数据响应的工具.可以用来模拟服务器响应....简单了解Easy Mock使用方法,可以参考如何使用Easy Mock,直接看文章中给出的视频连接即可。...另外支持了多个不同的js版本,可以根据需求选择使用。
: 如果你的配置创建了多个 “chunk”(例如使用多个入口起点或使用类似CommonsChunkPlugin 的插件),你应该使用以下的替换方式来确保每个文件名都不重复。...用过模板的都知道,熟悉了模板写起来快多了,大名鼎鼎的jade恐怕无人不知吧。...简单看了看还是原来jade熟悉的语法规则,果断在这个模板工程里面用上。...简单看了看还是原来jade熟悉的语法规则,果断在这个模板工程里面用上。...简单看了看还是原来jade熟悉的语法规则,果断在这个模板工程里面用上。
简单的总结 通过调用express()返回得到的app实际上是一个JavaScript的Function,它是一个Express的应用实例;app对象具有HTTP请求,配置中间件,渲染HTML视图,注册模板引擎这四大功能...它还有一些属性设置,这些属性可以改变程序的行为 request对象即表示HTTP请求,包含了请求查询字符串,参数,内容,HTTP头等属性 response对象则表示HTTP响应,即在受到请求时向客户端发送的...对比res.locals属性的特性,res.locals仅适用于请求的生命周期 你可以访问应用程序中呈现的模板中的本地变量,这对于想模板提供协助函数以及app-level非常有用。...回调方法的参数按序是请求对象,响应对象,下个中间件,参数值和参数名。 如果name是数组,会按照各个参数在数组中被声明的顺序将回调触发器注册下来。...例如,当:user出现在路由路径中,你可以映射用户加载的逻辑处理来自动提供req.user给这个路由,或者对输入的参数进行验证。
_router来自 this.lazyrouter()方法 //methods是常见的http请求以及其他一些方法名字的字符串数组 methods.forEach(function(method){ /...而route对象的Layer实例layer是没有route变量的,有method对象,保存了HTTP请求类型,也就是带了请求方法的路由中间件。...所以Router类中的Layer实例对象是保存普通中间件的实例或者路由中间件的路由,而Route实例对象route中的Layer实例layer是保存路由中间件的真正实例。...Route类用于创建路由中间件,并且创建拥有多个方法(多个方法是指app.get('/page',f1,f2...)中的那堆回调函数f1、f2...)的layer(对于同一个路径app.get、app.post...'); //使用什么模板引擎 //在某个请求里面,使用render res.render('index'); //因为设置了app.set('view engine', 'jade'); ,所以我们不用
以至于这技术出现很久以后,我还以为就是整个网页的框架先发送完毕后,用另一个或几个 ajax 请求再请求页面内的模块。...HTML 作为父模版的数据”,指的就是这样,temp.s1 和 temp.s2 两个方法会生成 s1.jade 和 s2.jade 两个文件的 HTML 代码,然后把这两段代码作为 layout.jade...一般来说,两个 section 的数据是分别获取的——不管是通过查询数据库还是 RESTful 请求,我们用两个函数来模拟这样的异步操作。...在接下来的优化之前,我们加入 jquery 库并把 css 样式放到外部文件,顺便,把之后我们会用到的浏览器端使用 jade 模板所需要的 runtime.js 文件也加入进来,在包含 app.js 的目录下运行...这时你会看到,请求网页的第二秒,出现两个空白虚线框,第五秒,出现 Partial 2 部分,第八秒,出现 Partial 1 部分,网页请求完成。
领取专属 10元无门槛券
手把手带您无忧上云