设为首页 收藏本站
查看: 1063|回复: 0

[经验分享] Node.js之Express一

[复制链接]

尚未签到

发表于 2017-2-25 09:14:51 | 显示全部楼层 |阅读模式
  前面也了解了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来解决
DSC0000.png

  三、路由
  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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-346858-1-1.html 上篇帖子: AngularJS Eclipse——新手入门【翻译+整理】 下篇帖子: 我和博客这3年
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表