Express框架学习总结
最近学了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框架学习总结的更多相关文章
- Node.js Express 框架学习
转载:http://JavaScript.ruanyifeng.com/nodejs/express.html#toc0 感觉很牛的样子,不过觉得对初学者没太大用,里面很多例子用的api都没有详细的说 ...
- express框架学习笔记
用express框架也有一段时间了,下面我总结一下我做项目时迷惑的点: app.use()与app.get()的区别 app.use()是用来为应用程序绑定中间件的,当第一个参数是path是,第二个参 ...
- Nodejs 的 Express框架 学习体会 补充中。。。
最近为了用Shadow Socket FQ,到https://bandwagonhost.com上买了一个便宜的vps,19.99美元一年.服务器闲着也是闲着,就想搭建一个简单的博客. Express ...
- nodejs学习笔记二:解析express框架项目文件
上一章介绍了如何去创建一个express框架的工程项目,这章介绍一下express框架下的文件和用法解析,上一张我们创建的工程项目结构图如下: models是不属于原工程项目结构,为了实现数据模型后添 ...
- nodejs学习笔记一:安装express框架并构建工程目录
偶遇node是在一个阳光明媚的上午,无意间打开博客看到一片关于nodejs的介绍,通读全篇后,心情跌宕起伏,哎呀,这么好的东西我竟然现在才知道,这是最气的,于是马上开始制定学习nodejs计划,好了, ...
- 从零开始学习Node.js例子四 多页面实现数学运算 续一(使用connect和express框架)
1.使用connect框架 .use方法用于绑定中间件到connect服务器,它会配置一系列在接到请求时调用的中间件模块,此例中我们要配置的中间件有favicon logger static rout ...
- Node.js+Express框架+Mongo学习(一)第一个node.js实例
1.在桌面新建一个空的文件夹,比如叫node,当然也可以在其它地方新建. 2.命令行进入到所新建的文件夹的目录,下载Express框架,再在这个文件夹里新建一个叫final的项目 3.在项目(fina ...
- Nodejs学习笔记(3) 创建服务器:Web 模块(http)与 express 框架
目录 参考资料 1. 使用 http 模块创建服务器 1.1 实现思路及代码 1.2 HTTP 结构 1.2.1 Request中的重要字段 1.2.2 Response 头信息:文件类型.状态码.连 ...
- express 框架之session
一.什么是session? 最近在学习node.js 的express框架,接触到了关于session方面的内容.翻阅了一些的博客,学到了不少东西,发现一篇博文讲的很好,概念内容摘抄如下: Sessi ...
随机推荐
- Firefly distributed模块的原理与twisted中PB远程调用协议
这些天断断续续在看Firefly, 看了一下distributed模块的设计,其实就是使用的twisted.spread.pb觉得以后要是想用Firefly有必要了解一下twisted, 所以在网上查 ...
- wcf-1
1.WCF是什么? WindowsCommunication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,它是.NET框架的一部分,由.NET Framework 3. ...
- Jordan Lecture Note-8: The Sequential Minimal Optimization Algorithm (SMO).
The Sequential Minimal Optimization Algorithm (SMO) 本文主要介绍用于解决SVM对偶模型的算法,它于1998年由John Platt在论文“Seque ...
- java_jdbc_3层 解耦
Dao - 提供接口 DaoImpl - 实现 DaoFactory - 工厂模式获取实现 DaoExcetpion - jdbc异常处理 实现runtime exception类即可 TestDem ...
- Hibernate初级
文章来源: http://blog.csdn.net/jiuqiyuliang/article/details/39078749/ 持久化(Persistence),把数据(如内存中的对象)保存到可永 ...
- ios代理设计模式
代理设计模式的作用: 1.A对象监听B对象的一些行为,A成为B的代理 2.B对象想告诉A对象一些事情,A成为B的代理 代理设计模式的总结: 如果你想监听别人的一些行为,那么 ...
- Android_Intent_passValue(4)
xml布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- Linux下root密码忘记的解决办法
{启动方式} ========================================================================== 一. lilo 1. 在出现 lil ...
- Ubuntu 安装php_intl 扩展
PHP Intl 类在I18n的网站中真的很方便,允许你依赖在终端用户区域,很容易的输出正确的日期格式. 在使用 yii2-app-ecom , 初始化之后,访问首页出现了: The default ...
- .NET学习笔记(2) — IIS服务器环境搭建
目录 一:开启Windows系统自带的IIS服务器方法 二:备注 三:常见问题 一:开启Windows系统自带的IIS服务器方法 第一步:安装IIS,控制面板->程序和功能-> ...