一、EJS

概述:前端咱们使用过的一个模板套路,是underscore的套路。接下来EJS它属于后台工程师人的模板。

https://www.npmjs.com/package/ejs 官网地址

特点:

Control flow with <% %>             流程控制语句用的是<% %>   :例如if   for循环等等

Escaped output with <%= %> (escape function configurable)     如果有赋值的操作(输出)你可以用<%= 变量名%>

//需要的模块 express  app.js
var express = require("express"); var app = express();
//设置模板引擎
app.set("view engine","ejs");
//这个是修改默认的文件夹的目录名字
app.set("views","template");
app.get("/",function (req,res) {
//这里需要注意的事情:不需要拼接路径
res.render("shouye",{
"gaoxing":"高兴",
"dongxi":"iphoneX",
"qian":2,
"ouxiang":["赵本山大叔","刘德华","成龙"]
})
}); app.listen(3000);
//template  shouye.ejs

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title></title>
</head>
<body>
<h1>我今天好<%=gaoxing%>啊,我买了一个<%=dongxi%>,花了我<%=qian%>啊</h1>
<select>
<% for(var i = 1990 ; i< 2017 ; i++) {%>
<% if (i %2 ==0) {%>
<option><%= i %></option>
<% }%>
<% } %>
</select> <ul>
<% for(var i = 0 ;i < ouxiang.length ;i++) {%>
<li><%= ouxiang[i]%></li>
<% } %>
</ul>
</body>
</html>

提示:①不需要引入EJS模块,因此就不需要require(“EJS”);

②设置视图的模板引擎为ejs,app.set(“view engine” ,”ejs”),设置完模板引擎,自动回搜索views文件夹中的模板。

③如果需要重新设置views文件夹的名称,app.set(“views”,”template”);

④已经学习过的res.send  end json jsonp redirect ,今天又学习了一个render

⑤res.render(“shouye”),直接加上模板的名称,不需要拼接路径也不需要有ejs尾缀,渲染的数据用第二个参数json传递

二、cookie (cookie-parser)

概述:HTTP协议(应用层FTP)而且还是短轮询链接,发起一次请求之后,就断开连接了;

Cookie它主要做的事情,是让服务器知道谁访问了我,知道谁是谁。

注意:这里面的信物就是咱们今天学习的cookie(饼干),cookie的下发是服务器下发;在node的学习当中有一个模块叫做,它对于cookie进行了封装。

注意:cookie是由服务器下发,用的是报文头下发,报文当中多了一个选项 set-cookie = “XXXXXXX”,

当你浏览器再次访问服务器的时候,用的是上行请求的报文头装载cookie在上去。

//app.js
var express = require("express");
//解析cookie的时候,需要他解析
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser());
//设置模板引擎
app.set("view engine","ejs");
//中间件
app.get("/",function (req,res) {
res.render("shouye",{
"arr":req.cookies.visited||[]
});
}); //接受的是浏览器反问的时候给咱们的城市的信息
app.get("/:city",function (req,res) {
var city = req.params.city;
//这是第一次访问咱们这个中间件的时候,因为cookie还没有因此就没有visited的属性,因此走if分支
if(!req.cookies.visited){
var arr = [city];
}else{
//第二次访问这个中间件的时候,namecookie已经有了,因此在网cookie当中数组当中添加新的数据
var arr = req.cookies.visited;
if(arr.indexOf(city)==-1){
arr.push(city);
}
}
res.cookie("visited",arr,{maxAge:1000*60*60*24});
res.send("<h4>你要去的地方是"+city+"</h4>");
})
app.listen(3000);
//template   shouye.ejs 模板页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title></title>
</head>
<body>
<div>
旅游攻略
<a href="/北京">北京</a>
<a href="/上海">上海</a>
<a href="/广州">广州</a>
<a href="/深圳">深圳</a>
<a href="/苏州">苏州</a>
<a href="/杭州">杭州</a>
<a href="/成都">成都</a>
</div>
<% for(var i = 0; i< arr.length;i++) {%>
<h4><%= arr[i]%></h4>
<% } %>
</body>
</html>

三、session(express-session)

概述:每一次用户登录的时候,服务器会给客户端下发一个乱码(session),而每一次浏览器在反问的时候,带着乱码在上去,对比的活是服务器在做。服务器当中的某一部分的内存在进行对比,它(服务器)就知道你是谁?谁来了。

上面的这些操作相当于 setCookie 与cookie已经这只好了;

但是很好的一件事情,是express,它对外暴露了一个模块,这个模块对session进行了封装,我们直接使用,这个模块的名字 express-session

案例描述:有一个form表单,有用户名和密码(123456),每个人登录之后页面显示你的用户名;

//app.js
var express = require("express");
var formidable = require("formidable");
//express-session 模块的引用
var session = require('express-session');
var app = express(); //下面的东西不需要理解,因为人家让你这么写的
app.set('trust proxy', 1) ;
app.use(session({
secret: 'jiachenghao',
resave: false,
saveUninitialized: true,
cookie: {maxAge:86400} cookie这个选项什么都可以没有但是必须要有时间的设置
}));
//设置模板引擎
app.set("view engine","ejs")
app.get("/",function (req,res) {
res.render("index",{
login:req.session.login,
yonghuming:req.session.yonghuming
});
});
//post请求用formidable
app.post("/login",function (req,res) { var form = new formidable.IncomingForm();
form.parse(req,function (err,fields) {
if(fields.mima=="123456"){
req.session.login = true;
req.session.yonghuming = fields.yonghuming;
//重定向:又进入主页面是发起一次请求
res.redirect("/")
}
}) })

app.listen(3000);

//template  shouye.ejs  模板页面
<% if(!login) {%>
<!-- 没有登录的情况 -->
<form action="/login" method="post">
<p>
用户名:<input type="text" name="yonghuming"/>
</p>
<p>
密码&nbsp;&nbsp;:<input type="text" name="mima"/>
</p>
<input type="submit"/>
</form>
<% }else{%>
<!-- 这里是登录的情况 -->
<h3>欢迎你进入你的首页<%=yonghuming%></h3>
<% }%>

node(4)express 框架 EJS模板,cookie, session的学习的更多相关文章

  1. Node.js Express 框架

    Node.js Express 框架 Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP ...

  2. Node.js Express框架

    Express 介绍 Express是一个最小的,灵活的Node.js Web应用程序框架,它提供了一套强大的功能来开发Web和移动应用程序. 它有助于基于Node Web应用程序的快速开发.下面是一 ...

  3. node之Express框架

    Express是node的框架,通过Express我们快速搭建一个完整的网站,而不再只是前端了!所以Express还是非常值得学习的! express有各种中间件,我们可以在官方网站查询其用法. Ex ...

  4. Node.js Express 框架 Express

    Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速 ...

  5. 44.Node.js Express 框架--web框架

    转自:http://www.runoob.com/nodejs/nodejs-express-framework.html Express 简介 Express 是一个简洁而灵活的 node.js W ...

  6. Node.js Express 框架学习

    转载:http://JavaScript.ruanyifeng.com/nodejs/express.html#toc0 感觉很牛的样子,不过觉得对初学者没太大用,里面很多例子用的api都没有详细的说 ...

  7. Node的express框架安装

    第一步:在cmd命令行下执行npm install -g express,安装全局的express. 第二步:在命令行中输入express,如果出现express不是内部命令时, 输入npm inst ...

  8. 快速创建node应用[Express框架]

    安装Express npm install -g express 建立工程 express -e ejs FaceExpresscd FaceExpress && npm instal ...

  9. Node.js+Express框架+Mongo学习(一)第一个node.js实例

    1.在桌面新建一个空的文件夹,比如叫node,当然也可以在其它地方新建. 2.命令行进入到所新建的文件夹的目录,下载Express框架,再在这个文件夹里新建一个叫final的项目 3.在项目(fina ...

随机推荐

  1. (转)python的paramiko模块

    python的paramiko模块  原文:http://www.cnblogs.com/breezey/p/6663546.html     paramiko是用python语言写的一个模块,遵循S ...

  2. 再学Java 之 private、protected、public和default的作用域

    前言:如果提到protected的访问控制级别,您的第一反应是”只能是子类才可以访问“,那么您很可能需要往下看. 首先,大致介绍一下各个访问控制符的访问控制级别(具体的介绍很多大牛的博文都有介绍,我就 ...

  3. 【Java并发编程】:volatile变量修饰符

    volatile用处说明     在JDK1.2之前,java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的.而随着JVM的成熟和优化,现在在多线程环境下volatile关键 ...

  4. 《Android应用性能优化》2——内存、CPU、性能测评

    4.高效使用内存 4.1 说说内存 Android设备的性能主要取决于以下三因素: CPU如何操纵特定的数据类型: 数据和指令需占用多少存储空间: 数据在内存中的布局 4.2 数据类型 int和lon ...

  5. udgrade rubygems-update

    gem install rubygems-update update_rubygems gem update --system gem install rubygems-bundler  

  6. LDAP落地实战(二):SVN集成OpenLDAP认证

    上一篇文章我们介绍了LDAP的部署以及管理维护,那么如何接入LDAP实现账号统一认证呢?这篇文章将带你完成svn的接入验证 subversion集成OpenLDAP认证 系统环境:debian8.4 ...

  7. R语言中常用包(二)

    数据导入 以下R包主要用于数据导入和保存数据 feather:一种快速,轻量级的文件格式.在R和python上都可使用readr:实现表格数据的快速导入.中文介绍可参考这里readxl:读取Micro ...

  8. ubuntu新建用户不能使用ll等指令,显示出来的信息没有颜色区分的解决方案

    ubuntu利用  useradd -m test -g admin 指令,创建用户test及其工作目录.但是登陆后,会出现不能使用很多指令“比如:ll.显示的信息没有颜色”等等此时   查看该用户的 ...

  9. 对于移动端浏览器touch事件的研究总结(4)判断手指滑动方向

    最近有一些微信的项目,虽然页面很简单,但配合手势后的效果却是很不错的.最基本的效果就是手指向上滑,页面配合css3出现一个展开效果,手指向下滑将展开的内容按原路径收起.其实就是一个简单的判断手指滑动方 ...

  10. Kafka、RabbitMQ、RocketMQ消息中间件的对比

    引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,目前对Kafka.RabbitMQ.RocketMQ这三个消息中间件做下对比分析. - - k ...