简介
Express是node.js Web应用框架,提供了一系列工具
特点:
--可以设置中间件相应请求
--定义路由表
--向模块传参渲染HTML页面
实例:
var express = require('express');
var app = express();
app.get('/',function (req,res) {
res.end('Hello World');
});
var server = app.listen(6600,function () {
var host = server.address().address;
var port = server.address().port;
console.log("地址为:http://%s:%s",host,port );
});
App.get(path,callback);
Path:路径
Callback;回调函数,两个参数:1.客户端的请求 2:服务器端的返回请求
Path=’/’表示本地
如果将Path改为如下:
app.get('/index',function (req,res) {
res.end('Hello World');
});
打开路径:localhost:6000/index,可以看到如下
因此,大家可以大概明白path参数的作用
-------
App.listen()确定监听端口号
App.address().address以及app.port().port()就是获取相应的参数
-------
Request和response对象
Request对象:
常见属性
req.app | 当callback为外部文件时,用req.app访问express的实例 |
req.baseUrl | 获取路由当前安装的URL路径 |
req.body / req.cookies | 获得「请求主体」/ Cookies |
req.fresh / req.stale | 判断请求是否还「新鲜」 |
req.params | 获取路由的parameters |
req.hostname / req.ip | 获取主机名和IP地址 |
req.originalUrl | 获取原始请求URL |
req.path | 获取请求路径 |
req.protocol | 获取协议类型 |
req.query | 获取URL的查询参数串 |
req.route | 获取当前匹配的路由 |
req.subdomains | 获取子域名 |
req.accepts() | 检查可接受的请求的文档类型 |
req.acceptsCharsets / req.acceptsEncodings / req.acceptsLanguages | 返回指定字符集的第一个可接受字符编码 |
req.get() | 获取指定的HTTP请求头
|
req.is() | 判断请求头Content-Type的MIME类型
|
Response 对象 - response 对象表示 HTTP 响应,即在接收到请求时向客户端发送的 HTTP 响应数据。常见属性有:
res.app | 同req.app一样 |
res.append() | 追加指定HTTP头 |
res.set() | 在res.append()后将重置之前设置的头 |
res.cookie(name,value [,option]) opition: domain / expires / httpOnly / maxAge / path / secure / signed
| 设置Cookie |
res.clearCookie() | 清除Cookie |
res.download() | 传送指定路径的文件 |
res.get() | 返回指定的HTTP头 |
res.json() | 传送JSON响应 |
res.jsonp() | 传送JSONP响应 |
res.location() | 只设置响应的Location HTTP头,不设置状态码或者close response |
res.redirect() | 设置响应的Location HTTP头,并且设置状态码302 |
res.render(view,[locals],callback) | 渲染一个view,同时向callback传递渲染后的字符串,如果在渲染过程中有错误发生next(err)将会被自动调用。callback将会被传入一个可能发生的错误以及渲染后的页面,这样就不会自动输出了。 |
res.send() | 传送HTTP响应 |
res.sendFile(path [,options] [,fn]) | 传送指定路径的文件 -会自动根据文件extension设定Content-Type |
res.set() | 设置HTTP头,传入object可以一次设置多个头 |
res.status() | 设置HTTP状态码 |
res.type() | 设置Content-Type的MIME类型 |
静态文件
express.static(图片、Css、javascript等)
express.static中间件来设置镜头文件路径
app.use(express.static(‘目录’));
实例
var express = require('express');
var app = express();
app.use(express.static('public'));
app.get('/index',function (req,res) {
res.send('我认为最深沉的爱 \n' +
'莫过于你离开以后 \n' +
'我活成了你的样子。');
});
app.post('/index',function (req,res) {
res.send("Is life always this hard,or is it just when you are a kid? \n" +
"人生总是那么痛苦吗?还是只有小时候是这样? \n" +
"Always like this. \n" +
"总是如此。\n");
});
var server = app.listen(6600,function () {
var host = server.address().address;
var port = server.address().port;
console.log("地址为:http://%s:%s",host,port );
});
访问地址:http://localhost:6600/images/4.png
解析
注意到Express框架里面有一个public文件夹,文件夹下面分别是三个文件夹(images\javascripts\stylesheets),我们可以分别在这些文件夹里面放入照片、javascript文件和css文件。
app.use(‘public’);
这个函数,让用户可以访问public文件夹里面的文件,我在images文件夹里面放入一个名为4.png的照片,,通过访问路径:port/images/照片名 即可看到这张照片
Get方法
实例
var express = require('express');
var app = express();
app.use(express.static('public'));
app.get('/index.html', function (req, res) {
res.sendFile( __dirname + "/" + "index.html" );
});
app.get('/deal',function (req,res) {
res.send("赛区:"+req.query.area+"\n\n战队名"+req.query.teamname);
});
app.post('/index2',function (req,res) {
res.send("Is life always this hard,or is it just when you are a kid? \n" +
"人生总是那么痛苦吗?还是只有小时候是这样? \n" +
"Always like this. \n" +
"总是如此。\n");
});
var server = app.listen(6600,function () {
var host = server.address().address;
var port = server.address().port;
console.log("地址为:http://%s:%s",host,port );
});
在这里,我新建了一个名为index.html的文件
在项目文件夹下面想新建一个名为index.html的文件,内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>填写表格</title>
</head>
<body>
<h1 style="vertical-align: middle;text-align: center">s9英雄联盟总决赛冠军竞猜</h1>
<form action="http://127.0.0.1:6600/deal" method="get">
<p style="vertical-align: middle;text-align: center"><label>赛区</label><input type="text" name="area"></p>
<p style="vertical-align: middle;text-align: center"><label>战队名</label><input type="text" name="teamname"></p>
<p style="vertical-align: middle;text-align: center"><input type="submit" value="提交"></p>
</form>
</body>
</html>
可以看到,这个html文件是get方式提交表格,<form>标签写的跳转路径为http://127.0.0.1:6600/deal
在express_test.js文件中,我写了两个app.get(),一个是index.html路径,另外一个为处理index.html提交的表格/deal路径
在第一个get方法中,我通过req.query.teamname和req.query.area方法分别获得用户提交的结果,然后通过res.send()返回一个结果
这是一个简单处理一次客户端的请求
提交表单
Post方法
将index.html中的method改为post,用post来处理用户提交的数据。
实例
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
var urlencodedParser = bodyParser.urlencoded({ extended: false });
app.use(express.static('public'));
app.get('/index.html', function (req, res) {
res.sendFile( __dirname + "/" + "index.html" );
});
app.get('/deal2',function (req,res) {
res.send("赛区:"+req.query.area+"\n\n战队名"+req.query.teamname);
});
app.post('/deal',urlencodedParser,function (req,res) {
res.send("赛区:"+req.body.area+"\n\n战队名"+req.body.teamname);
});
var server = app.listen(6600,function () {
var host = server.address().address;
var port = server.address().port;
console.log("地址为:http://%s:%s",host,port );
});
为了区别get和post处理方法,我把get的路由改为‘/deal2’,post的路由改为‘/deal’
这个运行的效果和上面get的几乎一样,除了一点,那就是数据传输的方式,get方法是通过url来传输数据的,而Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。因此get传输的数据量相比较post方法而言更短,更不安全。
谈到Express处理post方法传来的数据也和处理get方法不一样,通过json解析来获取值,这就需要json数据解析的中间件body-parser
我们从req.body获取post传来的世界,然后通过json解析获得用户传来的结果。
第一种方式,直接对post方法设置解析
第二种方式,app.use()来设置json解析
两者皆可