Node.js之Express一
前面也了解了HTTP模块,但它并不支持session、cookie等。Express是对HTTP模块的封装,同时也支持session这些,使用起来也更好用。Express更有点像IIS服务器。它也是属于一个模块的内容,所以当然是要先添加Express模块 npm install express.然后就是创建对象和使用。
var express=require('express');
var app=experss();
一、Express设置
Express提供了控制Express服务器的行为的一些应用程序设置。这些设置定义了环境以及Express如何处理JSON解析、路由和视图。express对象提供set(setting,value)、enable(setting)、disable(setting)方法为应用程序的设置来设定值。既然可以设置那就可以获取。Express使用get(setting)、enable(setting)、disable(setting)来获取设定的值。
下面是它的一些设置:
env:定义环境模式字符串,如development(开发)、testing(测试)和production(生产).默认process.env.NODE_ENV
trust_proxy:启用/禁止方向代理的支持。默认disabled(禁用).
jsonp callback name:定义jsonp请求的默认回调名称,默认?callback=
jsonp replacer:定义json replacer回调函数。默认null。
case sensitive routing:启用/禁用区分大小写。默认disabled。
strict routing:启用/禁用严格的路由。例如/home和/home/是不一样的。默认disabled.
view cache:启用/禁用视图模板编译缓存,这保留编译模板的缓存版本。默认disabled.
view engine:指定呈现模板时,如果从视图中省略了文件扩展名,应该使用的默认模板引擎扩展
views:指定模板引擎用来查找视图模板的路径.默认./views.
二、启动Express服务器
使用app.listen(port)调用把底层的HTTP连接绑定到port(端口)上,并开始监听它。顶层的http连接使用的是利用http库中创建的server对象上的listen()方法产生相同连接。其实express()返回的值实际是一个回调函数,它映射了传递到http.createServer()和https.createServer()方法的回调函数。
var express=require('express');
var http=require('http');
var app=express();
http.createServer(app).listen(8080);
app.get('/',function(req,res){
res.send('Hello World');
})
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe Express_http.js
module.js:327
throw err;
^ Error: Cannot find module 'express'
at Function.Module._resolveFilename (module.js:325:15)
at Function.Module._load (module.js:276:25)
at Module.require (module.js:353:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (f:\NodeJsDemo\Express_http.js:12:14)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10) Process finished with exit code 1
如果出现上面的错误表示找不到模块Express,可以在该源码文件夹执行npm install express来解决

三、路由
1.实现路由
路由就是根据http请求的虚拟路径找到服务器对应的物理路径。在.Net的MVC中也有路由表,其实和它差不多.
express模块提供了函数来实现。app.<method>(path,[meddleware,..],callback)
method:get、post等请求方法
meddleware:回调函数要执行前要应用的中间件函数
express还提供了一个方法app.all().回调函数app.all()调用用于指定路径的每个请求,不止是HTTP方法。app.all()可以接受*字符作为路径的通配符,这对于实现记录请求日志或其他特殊的功能来处理请求是一不错的方法。
2.在路由中应用参数
应用参数意味着变化,不是死的一成不变的。.Net自定义路由也是,可以regist路由。
express中主要有4种方法:
1.查询字符串
这种是最基础的最常见的.通过url路径后面加?key=value&key1=value1来实现。
2.post参数
这个会用到中间件body-parser。所以先跳过。
3.正则表达式app.get(正则,function(req,res){})
例如:app.get(/^\/book\/(\w+)\:(\W+)?$/,callback),可以通过req.param[index]获取url路径对应的参数
4.使用已定义的参数来应用路由参数
app.get('/user/:userId',callback)。这时可以通过req.param(参数名)来获取参数
为已定义的参数应用回调函数:
使用已定义的参数有一个好处,如果定义的参数在URL中,可以指定被执行的回调函数。当解析url时,如果express发现某个参数有注册的回调函数,它就在调用路由处理程序之前调用参数的回调函数,可以为一个路由注册多个回调函数。
用app.param(param,function(req,res,next,value){})来实现为已定义的参数应用回调函数。
param:定义的参数名
nest:用于已注册的下一个app.param()回调的回调函数。必须在回调函数中调用next(),否则回调链将被破坏。
value:从url路径解析的参数的值。
demo代码:
var express = require('express');
var url = require('url');
var app = express();
app.listen(8080);
app.get('/', function (req, res) {
res.send("Get Index");
});
app.get('/find', function(req, res){
var url_parts = url.parse(req.url, true);
var query = url_parts.query;
var response = 'Finding Book: Author: ' + query.author +
' Title: ' + query.title;
console.log('\nQuery URL: ' + req.originalUrl);
console.log(response);
res.send(response);
});
app.get(/^\/book\/(\w+)\:(\w+)?$/, function(req, res){
var response = 'Get Book: Chapter: ' + req.params[0] +
' Page: ' + req.params[1];
console.log('\nRegex URL: ' + req.originalUrl);
console.log(response);
res.send(response);
});
app.get('/user/:userid', function (req, res) {
var response = 'Get User: ' + req.param('userid');
console.log('\nParam URL: ' + req.originalUrl);
console.log(response);
res.send(response);
});
app.param('userid', function(req, res, next, value){
console.log("\nRequest received with userid: " + value);
next();
});
// /find?author=Brad&title=Node
// /book/12:15
// /user/4983
在浏览器中以此输入http://127.0.0.1:8080/find、/find?author=Brad&title=Node、/book/12:15 、/user/4983会有一下输出
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe express_routes.js Query URL: /find
Finding Book: Author: undefined Title: undefined Query URL: /find?author=Brad&title=Node
Finding Book: Author: Brad Title: Node Regex URL: /book/12:15
Get Book: Chapter: 12 Page: 15 Request received with userid: 4983 Param URL: /user/4983
Get User: 4983
上面使用自定义的参数中只有一个参数,现在弄一个两个参数的来看一下效果,并为这两个参数都应用了回调函数。
var express = require('express');
var url = require('url');
var app = express();
app.listen(8080);
app.get('/user/:userid/pwd/:pwd', function (req, res) {
var response = 'Get User: ' + req.param('userid');
console.log('\nParam URL: ' + req.originalUrl);
console.log(response);
res.send(response);
});
app.param('userid', function(req, res, next, value){
console.log("\nRequest received with userid: " + value);
next();
});
app.param('pwd', function(req, res, next, value){
console.log("\nRequest received with pwd: " + value);
next();
});
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe express_routes.js Request received with userid: 4983 Request received with pwd: 123456 Param URL: /user/4983/pwd/123456
Get User: 4983
Node.js之Express一的更多相关文章
- Node.js、express、mongodb 实现分页查询、条件搜索
前言 在上一篇Node.js.express.mongodb 入门(基于easyui datagrid增删改查) 的基础上实现了分页查询.带条件搜索. 实现效果 1.列表第一页. 2.列表第二页 3. ...
- Node.js、express、mongodb 入门(基于easyui datagrid增删改查)
前言 从在本机(win8.1)环境安装相关环境到做完这个demo大概不到两周时间,刚开始只是在本机安装环境并没有敲个Demo,从周末开始断断续续的想写一个,按照惯性思维就写一个增删改查吧,一方面是体验 ...
- node.js和express.js安装和使用步骤 [windows]
PS: NODEJS:https://nodejs.org NPM:https://www.npmjs.com/ 一.node.js安装与配置 到https://nodejs.org/en/downl ...
- Node.js基于Express框架搭建一个简单的注册登录Web功能
这个小应用使用到了node.js bootstrap express 以及数据库的操作 :使用mongoose对象模型来操作 mongodb 如果没了解过的可以先去基本了解一下相关概念~ 首先注 ...
- node.js框架express的安装
node.js框架express的安装 首先假定你已经安装了 Node.js,接下来为你的应用创建一个目录,然后进入此目录并将其作为当前工作目录. $ mkdir myapp $ cd myapp 通 ...
- Node.js系列-express(上)
前言 Node.js系列的第一篇:http,大概描述了通过使用node.js内置的api创建一个服务并监听request实现简单的增删改查.现在,我们就通过通读express官网及使用express框 ...
- node.js,express入门看详细篇
先最简单的代码 安装 npm install express app.js 代码内容 const express = require('express') const app = express() ...
- node.js使用express框架进行文件上传
关于node.js使用express框架进行文件上传,主要来自于最近对Settings-Sync插件做的研究.目前的研究算是取得的比较好的进展.Settings-Sync中通过快捷键上传文件,其实主要 ...
- node.js之express框架
之前学习过node.js接触过express框架,最近为了编写一个mock server正好用到了express.下面正好就跟大家介绍一下关于express.今天的内容主要围绕这么几个方面? expr ...
- node.js中express模块创建服务器和http模块客户端发请求
首先下载express模块,命令行输入 npm install express 1.node.js中express模块创建服务端 在js代码同文件位置新建一个文件夹(www_root),里面存放网页文 ...
随机推荐
- linux系统编程之错误处理:perror,strerror和errno
1,在系统编程中错误通常通过函数返回值来表示,并通过特殊变量errno来描述. errno这个全局变量在<errno.h>头文件中声明如下:extern int errno; errno是 ...
- 设计模式之单件模式(Singleton Pattern)
一.单件模式是什么? 单件模式也被称为单例模式,它的作用说白了就是为了确保“该类的实例只有一个” 单件模式经常被用来管理资源敏感的对象,比如:数据库连接对象.注册表对象.线程池对象等等,这种对象如果同 ...
- C# 实现邮件代发
由于自己很好奇,有一些推广之类的 邮件,发件人后面,都有一个 由 .... 代发. 所以,查找了一些资料,来验证了一下实现方法. 咱们先来看看,实现代发的 理想效果图 当然,这一种,是利用 代发的 邮 ...
- MSSQL数据表生成模型
MSSQL数据表生成模型 http://pan.baidu.com/s/1mhBAapy
- [招聘] 上海耐斯特数字招聘3D图形软件工程师
公司介绍 上海耐斯特数字科技有限公司成立于2018年9月,致力于为中国原创动画.影视行业提供新一代核心技术解决方案和全流程技术服务.公司创始团队拥有国内外领先的行业背景与资源,在DCC软件开发方面具有 ...
- Eclipse (JavaEE版)中修改web项目的访问路径
访问路径,也就是指在浏览器中访问该web系统时的根路径,比如http://localhost:8080/xxxx/index.jsp 这里的xxxx. 也就是request.getContextPa ...
- Android Source 源码已下载但 Android Studio 找不到的解决办法
Android Studio 2.1 reporting in: solved the issue by resetting SDK. Preferences -> Appearance &am ...
- s11 day104 数据库表结构与立即支付流程
数据库表结构: 13张 1. 课程大类 2.课程子类 3.学位课程 4.老师表 5.奖学金 6.专题课 7.课程详情 8.课程大纲 9.常见问题 10.章节 11.课时 12.作业表 13.价格策略 ...
- Notification通知栏的使用
一.基础的知识了解 1.pendingIntent : 它是Intent的封装,可以跳转某个Activity.给Service发送一个命令.还可以发送一个广播 2.进度条的使用方法 3.更新通知栏的信 ...
- LOJ#3086. 「GXOI / GZOI2019」逼死强迫症(矩阵快速幂)
题面 传送门 题解 先考虑全都放\(1\times 2\)的方块的方案,设防\(i\)列的方案数为\(g_i\),容易推出\(g_i=g_{i-1}+g_{i-2}\),边界条件为\(g_0=g_1= ...