最近学了Express框架,在学习的过程中,参考了一些资料,感觉Express框架比原生Node.js好用多了。下面我将我学习总结的内容如下:

Express中文网     http://www.expressjs.com.cn/

Express英文网     http://expressjs.com/

一、Express框架

Express框架是后台的Node框架,所以和jQuery、zepto、yui、bootstrap都不是一个东西。

Express在后台的受欢迎的程度,和jQuery一样,就是企业的事实上的标准。

       ● 原生Node开发,会发现有很多问题。比如:

         ■ 呈递静态页面很不方便,需要处理每个HTTP请求,还要考虑304问题

         ■ 路由处理代码不直观清晰,需要写很多正则表达式和字符串函数

         ■ 不能集中精力写业务,要考虑很多其他的东西

     安装Express框架,就是使用npm的命令
   npm install --save express         

--save参数,表示自动修改package.json文件,自动添加依赖项。

路由能力:

    var express = require("express");

    var app = express();

    app.get("/",function(req,res){
res.send("你好");
}); app.get("/haha",function(req,res){
res.send("这是haha页面,哈哈哈哈哈哈");
}); app.get(/^\/student\/([\d]{})$/,function(req,res){
res.send("学生信息,学号" + req.params[]);
}); app.get("/teacher/:gonghao",function(req,res){
res.send("老师信息,工号" + req.params.gonghao);
}); app.listen();

静态文件伺服能力:

    app.use(express.static("./public"));

模板引擎:

    var express = require("express");

    var app = express();

    app.set("view engine","ejs");

    app.get("/",function(req,res){
res.render("haha",{
"news" : ["我是小新闻啊","我也是啊","哈哈哈哈"]
});
}); app.listen();

      二、路由

当用get请求访问一个网址的时候,做什么事情:

    app.get("网址",function(req,res){

    });       

当用post访问一个网址的时候,做什么事情:

    app.post("网址",function(req,res){

    });

如果想处理这个网址的任何method的请求,那么写all

    app.all("/",function(){

    });

这里的网址,不分大小写,也就是说,你路由是

    app.get("/AAb",function(req,res){
res.send("你好");
});

   三、中间件

如果我的的get、post回调函数中,没有next参数,那么就匹配上第一个路由,就不会往下匹配了。

如果想往下匹配的话,那么需要写next() 

    app.get("/",function(req,res,next){
console.log("");
next();
}); app.get("/",function(req,res){
console.log("");
});

路由get、post这些东西,就是中间件,中间件讲究顺序,匹配上第一个之后,就不会往后匹配了。next函数才能够继续往后匹配。

app.use()也是一个中间件。与get、post不同的是,他的网址不是精确匹配的。而是能够有小文件夹拓展的。

比如网址:  http://127.0.0.1:3000/admin/aa/bb/cc/dd

    app.use("/admin",function(req,res){
res.write(req.originalUrl + "\n"); // /admin/aa/bb/cc/dd
res.write(req.baseUrl + "\n"); // /admin
res.write(req.path + "\n"); // /aa/bb/cc/dd
res.end("你好");
});

● 大多数情况下,渲染内容用res.render(),将会根据views中的模板文件进行渲染。如果不想使用views文件夹,想自己设置文件夹名字,那么app.set("views","aaaa");

● 如果想写一个快速测试页,当然可以使用res.send()。这个函数将根据内容,自动帮我们设置了Content-Type头部和200状态码。send()只能用一次,和end一样。和end不一样在哪里?能够自动设置MIME类型。

● 如果想使用不同的状态码,可以:

res.status(404).send('Sorry, we cannot find that!');

● 如果想使用不同的Content-Type,可以:

res.set('Content-Type', 'text/html');

四、GET请求和POST请求的参数

● GET请求的参数在URL中,在原生Node中,需要使用url模块来识别参数字符串。在Express中,不需要使用url模块了。可以直接使用req.query对象。

● POST请求在express中不能直接获得,必须使用body-parser模块。使用后,将可以用req.body得到参数。但是如果表单中含有文件上传,那么还是需要使用formidable模块。

     Node中全是回调函数,所以我们自己封装的函数,里面如果有异步的方法,比如I/O,那么就要用回调函数的方法封装。

 

Express框架学习总结的更多相关文章

  1. Node.js Express 框架学习

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

  2. express框架学习笔记

    用express框架也有一段时间了,下面我总结一下我做项目时迷惑的点: app.use()与app.get()的区别 app.use()是用来为应用程序绑定中间件的,当第一个参数是path是,第二个参 ...

  3. Nodejs 的 Express框架 学习体会 补充中。。。

    最近为了用Shadow Socket FQ,到https://bandwagonhost.com上买了一个便宜的vps,19.99美元一年.服务器闲着也是闲着,就想搭建一个简单的博客. Express ...

  4. nodejs学习笔记二:解析express框架项目文件

    上一章介绍了如何去创建一个express框架的工程项目,这章介绍一下express框架下的文件和用法解析,上一张我们创建的工程项目结构图如下: models是不属于原工程项目结构,为了实现数据模型后添 ...

  5. nodejs学习笔记一:安装express框架并构建工程目录

    偶遇node是在一个阳光明媚的上午,无意间打开博客看到一片关于nodejs的介绍,通读全篇后,心情跌宕起伏,哎呀,这么好的东西我竟然现在才知道,这是最气的,于是马上开始制定学习nodejs计划,好了, ...

  6. 从零开始学习Node.js例子四 多页面实现数学运算 续一(使用connect和express框架)

    1.使用connect框架 .use方法用于绑定中间件到connect服务器,它会配置一系列在接到请求时调用的中间件模块,此例中我们要配置的中间件有favicon logger static rout ...

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

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

  8. Nodejs学习笔记(3) 创建服务器:Web 模块(http)与 express 框架

    目录 参考资料 1. 使用 http 模块创建服务器 1.1 实现思路及代码 1.2 HTTP 结构 1.2.1 Request中的重要字段 1.2.2 Response 头信息:文件类型.状态码.连 ...

  9. express 框架之session

    一.什么是session? 最近在学习node.js 的express框架,接触到了关于session方面的内容.翻阅了一些的博客,学到了不少东西,发现一篇博文讲的很好,概念内容摘抄如下: Sessi ...

随机推荐

  1. 使用RecyclerView写树形结构的TreeRecyclerView

    简单介绍 android是不提供树形控件的,假设须要使用树形控件.我们应该怎么做呢? 先看效果 上图是一个明显的树形结构 实现原理 在逻辑上,它们是包括关系.数据结构上是多叉树,这是毋庸置疑的. 可是 ...

  2. PAT 1005

    1005. Spell It Right (20) Given a non-negative integer N, your task is to compute the sum of all the ...

  3. git svn 5点区别

    如果你在读这篇文章,说明你跟大多数开发者一样对GIT感兴趣,如果你还没有机会来试一试GIT,我想现在你就要了解它了. GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等.如果 ...

  4. java_Hashtable实例

    package ming; import java.util.Hashtable; class D { int count; public D(int count) { this.count = co ...

  5. Encryption

    Encryption Configuration Basic Usage Encrypting a value Decrypting a value Configuration Before usin ...

  6. 哇!今天找到一个非常好用的自动补全插件-necomplete.vim

    看别人说的什么xpcomplete,snipte,拿来都不会用,这个necomplete.vim还挺好用的,不用去按C-X,C-O进行补全,把关键字自动的列出来,调用的是用户自定义补全,^u^n^p的 ...

  7. oracle拼接字段用||

    ① //dual相当于一个临时表.用来测量@@@@H210000000003I4R 的长度用length() select length('@@@@H210000000003I4R') from du ...

  8. PayablebillImpl

    package nc.impl.arap.payablebill; import java.util.List; import java.util.Map; import nc.bs.dao.Base ...

  9. win32项目设置窗口全屏

    创建窗口的时候设置样式:CreateWindow(,,WS_MAXIMIZE,……): 显示窗口的时候设置:ShowWindow(hWnd,SM_MAXIMIZE);

  10. sql 中条件in参数问题

    经常遇到条件为in的模糊查询,sql传参可以在service中直接传递参数,不必使用占位符 select * from ud_order where status in ("+status+ ...