一、安装express

1.需先安装express-generator

npm install -g express-generator

2.安装express

npm install -g express 

3.验证是否安装成功

express --version

二、新建项目

1.创建ejs项目模板

express --view=ejs Express

2.安装依赖

cd  Express
npm install

三、启动项目

查看package.json里的 scripts命令,例如:

"scripts": {
"start": "node ./bin/www"
},

执行命令

node ./bin/www

打开 http://localhost:3000/

四、目录文件详解

bin/www           配置服务器监听端口

router/index.js    配置路由控制文件  可在里面配置多个路由

views/index.ejs   模板文件,即router/index.js 中调用的模板   <%= title %>  表示引用router/index.js 中的变量,如 <%= name %>

app.js                配置express对象

关于experss的路由配置

在 router/index.js 里配置各个路由

除了固定的路由路径外,express还支持配置动态的路由,即路由后面可以带参数,使用 req.params.参数名 获得参数值

路由规则同样支持js正则表达式,例如 router.get(' \/user\/正则' ,callback),这样的好处在于可以匹配更加复杂的路由。访问参数通过req.params[0] 进行访问

例子:

var express = require('express');
var router = express.Router(); /* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
}); router.get('/test', function(req, res, next) { // 配置固定的路由
res.send('test路径已经存在');
}); router.get('/user/:username', function(req, res, next) { // 配置带参数的动态路由
res.send('user:'+req.params.username); // req.params.参数名
}); module.exports = router;

REST风格的路由规则

Experss支持REST风格的请求方式,REST意思是表征状态转移,它是一种基于HTTP协议的网络应用的接口风格,充分利用HTTP的方法实现了统一风格的接口和服务

HTTP协议定义了以下8个标准请求方法:

GET :     请求获取指定的资源     获取

POST :     向指定资源提交数据    提交

DELETE : 请求服务器删除指定资源  删除

PUT :       请求服务器存储一个资源  存储

HEAD :     请求指定资源的响应头

TRACE :    回显服务器接到的请求,主要用于用户测试和诊断

CONNECT : HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器

OPTIONS :  返回服务器支持的HTTP请求方法

这8个方法都是安全的,所谓的安全指的是连续访问多次所获得的结果不受访问者的影响,而幂等指的是重复请求多次与一次请求的效果是一样的,比如获取。更新和删除操作是幂等,与新增不同

EXperss对每种HTTP请求方法都设计了不同的路由绑定函数,例如该路径绑定了GET请求,向这个路劲发起其他的请求方式不会被响应

router.all (path , callback,next)   方法可以响应所有的请求方式

例如:

router.get(path , callback) 

router.post(path , callback)

router.put(path , callback)

router.delete(path , callback)

路由的控制权转移

Experss 支持同一路径绑定多个函数,使用next() 可以让改请求执行下一个函数

例子:

router.all('/test',function(req,res,next){
console.log('执行 all 请求方法的函数')
next(); // 两个函数执行方法冲突,默认执行第一个。使用next() 则跳过该函数,执行下一个回调函数,即get
}) router.get('/test',function(req,res,next){
res.end('执行 get 请求方法的函数')
})

关于Express的模板引擎

express 的模板引擎有 ejs 和 jade 两种,它们的书写语法不同

ejs 模板的标签:

<% code %>   JavaScript代码

<%= code %>  显示替换过的HTML特殊字符内容  解析文本

<%- code %> 显示原始HTML内容,一般用于配置公共模板

关于模板引擎中的公共模板  layout.ejs

Express 支持定义公共模板,在views文件夹中创建 layout.ejs 文件   注意使用 <%- body %>

jade公共模板的实现:在我们请求的目的页面中的第一句写上 extends(继承)  name(模板布局名称)

ajs公共模板的实现: 引入express-partials 实现定义  layout.ejs

npm install express-partials

app.js里面引用express-partials: 
1 添加引用var partials = require(‘express-partials’);
2 在app.set(‘view engine’, ‘ejs’);下面添加app.use(partials());

ajs模板引擎中使用layout.ejs例子:

路由:

router.get('/', function(req, res, next) {
res.render('test', { title: 'Express' });
});

引用模板:

<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
<p>这是测试模板引擎</p>

自动调用公共模板 layout.js

<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1>这是公共模板头部</h1>
<%- body %>
<h1>这是公共模板底部</h1>
</body>
</html>

如果不愿意使用默认的layout.ejs,可自行指定  在定义参数里加上 layout : '模板名字'   使用 layout: false  则不使用公共模板

router.get('/', function(req, res, next) {
res.render('test', { title: 'Express' , layout:'layout2'});
});

关于模板引擎中的局部模板(视图片段) <%- partial %>

在某些情况下需要循环遍历输出数据,这时候就要用到局部模板,在视图中使用 partial 实现

在父模板中使用 partial('commentName', list) 遍历输出数据,传入两个参数,第一个为子模板的名字(也是遍历到的每个变量名),第二个为需要遍历的数据

定义子模板,输出遍历到的数据,使用的变量名称为父模板中引用的子模板名字

例子:

路由:

router.get("/",function(req,res){
res.render("index",{title:"片段视图",list:['第一','第二','第三']});
});

父模板:

<!-- 这里的 comment 是子模板的名字,list 是需要遍历输出的变量(数组或对象) -->
<ul><%- partial("comment", list)%></ul>

子模板:

<!-- comment 表示每个遍历到的数据,不过名称必须和父模板中的 partial方法第一个参数相同 -->
<li><%= comment %></li>

如果遍历输出的数据需要判断是第一个或者最后一个,可以使用 firstCollection  或者 lastCollection

判断第一个输出的数据加action类的例子:

<li class="<%if(firstInCollection){%> action <%}%>">
<%=comment%>
</li>

如果数据是由后台返回的数组,则可以使用下面的方式遍历输出:

<% arr.forEach(function(post,index){
if(index % 3==0){ %>
<div class="row">
<%}%>
<div class="span4">
<h2><a href="/u/<%=post.user%>"><%=post.user %></a>说</h2>
<p><small><%=post.time%></small></p>
<p><%=post.post%></p>
</div>
<% if(index % 3 == 2){%>
</div> <!--结束行-->
<%}%>
<%})%>
<% if (posts.length % 3 !=0){ %>
</div> <!--结束行-->
<%}%>

视图助手  locals   在app.js中声明    (可以理解为定义全局的函数或变量,每个视图都可以调用)

视图助手分为 静态视图助手 和 动态视图助手,两者的差别在于,静态视图助手可以是任何类型的对象,包括可接收任意类型参数的函数。但访问到的对象必须是和用户请求无关的。

而动态视图助手只能是一个函数,并且不能接收任何参数,但是可以访问 req 和 res 两个对象

静态视图助手:

app.locals.sayHello = function(data){
return data+'Wenlcome to locals'
}

可以在任意一个视图中调用:

<li class="<%if(firstInCollection){%> action <%}%>">
<%=sayHello(comment)%>
</li>

动态视图助手:  必须声明在 app.use('/', index)之前   使用 next()

// 动态视图助手
app.use(function(req, res, next){
res.locals.Welcome = function(){
return req
}
next()
}) app.use('/', index);
app.use('/users', users);

关于Express的条件渲染  if判断

格式:

<% if (条件){ %>
渲染内容
<%}%>

例子:

    if(true){ %>
<p>这是渲染内容</p>
<%}%>

Node.js框架 —— Express的更多相关文章

  1. node.js框架express的安装

    node.js框架express的安装 首先假定你已经安装了 Node.js,接下来为你的应用创建一个目录,然后进入此目录并将其作为当前工作目录. $ mkdir myapp $ cd myapp 通 ...

  2. 【前端node.js框架】node.js框架express

    server.js /* 以下代码等下会有详细的解释 */ var express = require('express'); // 用来引入express模块 var app = express() ...

  3. node.js 框架express有关于router的运用

    1.express 路由入门 const express = require('express'); let server = express(); server.listen(8087); //用户 ...

  4. node.js 框架express关于报错页面的配置

    1.声明报错的方法,以及相对应的页面 //把数据库的调用方法配置到请求中 server.use((req, res, next) => { //把数据库存入req中 req.db = db; / ...

  5. node.js和express.js安装和使用步骤 [windows]

    PS: NODEJS:https://nodejs.org NPM:https://www.npmjs.com/ 一.node.js安装与配置 到https://nodejs.org/en/downl ...

  6. Node.js基于Express框架搭建一个简单的注册登录Web功能

    这个小应用使用到了node.js  bootstrap  express  以及数据库的操作 :使用mongoose对象模型来操作 mongodb 如果没了解过的可以先去基本了解一下相关概念~ 首先注 ...

  7. node.js使用express框架进行文件上传

    关于node.js使用express框架进行文件上传,主要来自于最近对Settings-Sync插件做的研究.目前的研究算是取得的比较好的进展.Settings-Sync中通过快捷键上传文件,其实主要 ...

  8. node.js之express框架

    之前学习过node.js接触过express框架,最近为了编写一个mock server正好用到了express.下面正好就跟大家介绍一下关于express.今天的内容主要围绕这么几个方面? expr ...

  9. Node.js 框架对比之 Express VS Koa

    背景 上图是一个典型的采用 Node.js 开发 web 应用的前后端结构,下面介绍一下 Node 服务层在其中的作用以及使用 Node.js 的一些优劣. Node 服务层作用: 请求代理 传统做法 ...

随机推荐

  1. php逐行读取txt文件写入数组的方法

    使用说明: 采用fopen 方法,逐行读取数据,并使用feof($fp)  判断是否文件截止,最后通过filter() 方法,去除空白行,得到所需数据 $file = fopen("user ...

  2. SQL 多列合并一列

    select rtrim(姓)+ rtrim(名) as 姓名 from tb

  3. Java内存分配以及GC

    转自http://www.cnblogs.com/hnrainll/archive/2013/11/06/3410042.html  写的太棒了,简单易懂 Java垃圾回收概况 Java GC(Gar ...

  4. 测试BUG记录模板(供参考)

    文档说明如下: Bug严重程度: A-崩溃的:由于程序所引起的死机.非法退出.死循环:数据库发生死锁:因错误操作导致的程序中断:主要功能错误:造成数据破坏丢失或数据异常:数据库连接错误:数据通讯错误. ...

  5. Hibernate学习笔记(2)---hibernate核心文件

    配置hibernate.cfg.xml hibernate配置文件包含连接持久层与映射文件所需的基本信息.配置文件名默认为hibernate.cfg.xml. hibernate.cfg.xml文件配 ...

  6. Android studio打开项目一直卡住

    修改/gradle/wrapper/gradle-wrapper.properties文件中的最后一行distributionUrl=:(可找一个可用项目的复制过来)

  7. Java学习笔记7---父类构造方法有无参数对子类的影响

    子类不继承父类的构造方法,但父类的构造方法对子类构造方法的创建有影响.具体来说就是: ①.当父类没有无参构造方法时,子类也不能有无参构造方法:且必须在子类构造方法中显式以super(参数)的形式调用父 ...

  8. (译)JToken的层次结构

     原文地址:https://stackoverflow.com/questions/38558844/jcontainer-jobject-jtoken-and-linq-confusion/3856 ...

  9. python3之模块

    1.python3模块 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被别的程序引入,以使用该模块中的函数等功能.这也是使用 python 标准库的方法. 模块让你能够有逻辑地 ...

  10. CSS属性:背景属性(图文详解)

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. background系列属性 常见背景属性 CSS样式中,常见的背景属性 ...