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 ...
随机推荐
- 大作业 XXX大学 课程管理系统
#include<stdio.h> #include<iostream> #include<string.h> #include <fstream> # ...
- JS字符处理
JS取整 1.toFixed(num)(ps:num为保留小数点后几位) 自定义保留小数点后几位,进行四舍五入.严格来说,这个函数不属于取整,但是当num=0时,也就是取整了,所以一起放到这里,方便查 ...
- [React Fundamentals] Owner Ownee Relationship
The owner-ownee relationship is used to designate a parent-child relationship with React components ...
- ios的NSMutableString用法
版权声明:本文为博主原创文章,未经博主允许不得转载. 详见代码: // // main.m // Foundation5-NSMutableString // // Created by mj ...
- CodeMachine Debugger Extension DLL
http://www.codemachine.com/downloads.html http://www.codemachine.com/tool_cmkd.html#stack
- Docker intercontainer 网络解释
https://segmentfault.com/a/1190000000669312
- linux文件夹操作(及模糊搜索)
mkdir 文件夹名称 :创建文件夹 touch 文件名称 : 创建文件 给文件夹或文件授权 chmod -R 777 文件夹名称 : 递归给文件夹授读写执行权限 chmo ...
- Android HTTPS如何10分钟实现自签名SSL证书
前言 去年公司内一个应用加了支付宝支付功能,为了保证安全,支付请求链接写成了https. 由于公司服务器使用的是的自签名证书,而在Android系统中自己签署的不能通过验证的,所以会抛出错误. 于是我 ...
- JSON对象和string的相互转换
JSON.stringify(obj) 将JSON转为字符串. JSON.parse(string) 将字符串转为JSON格式.
- PeopleReady 是什么系统?其中文为全员就绪
PeopleReady 中文:全员就绪. 顾名思义: 一句话:PeopleReady 就是能使人快速Ready的系统. 稍长一句话:就是能使大家快速Ready(经验+知识)的系统. 详细的来说:通过积 ...