express的初步了解使用
express的使用
1:简介
Express是一个简洁而灵活node.js web应用框架,用来创建各种web应用,利用express可以搭建一个网站
Express框架核心功能:
- 设置中间件响应HTTP请求
- 设置路由执行不同的HTTP请求
- 可以通过向模板传递参数动态渲染页面
2: express安装
- npm install express --save
- npm install body-parser --save:nodejs中间件,用于处理url、json、text以及raw等编码数据
- npm install cookie-parser --save:解析cookie的工具,通过req.cookies,可以取到传过来的cookie,并把它们转成对象
- npm install multer --save:用于处理enctype="multipart/form-data"的表单数据
3:利用express起一个node服务
var express = require("express");
var app = express();
app.get("/",function(req,res){
res.send("第一个 Express 框架实例");
});
var server = app.listen(8081);
console.log("执行http://127.0.0.1:"+server.address().port)
34:请求和响应
Request对象,表示http请求,包含了请求查询字符串,参数,内容,http头部信息,常见属性:
- req.app:当callback为外部文件时候,用req.app访问express实例
- req.baseUrl:获取路由当前安装的URL路径
- req.body / req.cookies:获得「请求主体」/ Cookies
- req.fresh / req.stale:判断请求是否还「新鲜」
- req.hostname / req.ip:获取主机名和IP地址
- req.originalUrl:获取原始请求URL
- req.params:获取路由的parameters
- req.path:获取请求路径
- req.protocol:获取协议类型
- req.query:获取URL的查询参数串
- req.subdomains:获取子域名
- req.accpets():检查请求的Accept头的请求类型
- req.acceptsCharsets / req.acceptsEncodings / req.acceptsLanguages
- req.get():获取指定的HTTP请求头
- req.is():判断请求头Content-Type的MIME类型
Response对象,表示http响应,在接收到请求后向客户端发送的http响应数据,常见属性:
- res.app:同req.app一样
- res.append():追加指定HTTP头
- res.set()在res.append()后将重置之前设置的头
- res.cookie(name,value [,option]):设置Cookie
- opition: domain / expires / httpOnly / maxAge / path / secure / signed
- res.clearCookie():清除Cookie
- res.download():传送指定路径的文件
- res.get():返回指定的HTTP头
- res.json():传送JSON响应
- res.location():只设置响应的Location HTTP头,不设置状态码或者close response
- res.redirect():设置响应的Location HTTP头,并且设置状态码302
- res.send():传送HTTP响应
- res.sendFile(path [,options] [,fn]):传送指定路径的文件 -会自动根据文件extension设定Content-Type
- res.set():设置HTTP头,传入object可以一次设置多个头
- res.status():设置HTTP状态码
- res.type():设置Content-Type的MIME类型
5:路由:
路由决定了由谁(指定脚本)去响应客户端请求。
在HTTP请求中,我们可以通过路由提取出请求的URL以及GET/POST参数。
6:静态文件
express.static("public")
以下几个示例需要使用一个server
var express = require("express");
var fs = require("fs");
var bodyParser = require("body-parser");
var cookieParser = require("cookie-parser");
var multer = require("multer");
var app = express();
/*静态资源*/
app.use(express.static("public"));
/*post请求需要创建application/x-www-form-urlencoded解析*/
var urlencodedParser = bodyParser.urlencoded({extended:false});
/*文件上传*/
app.use(multer({ dest: '/tmp/'}).array('image'));
/*使用cookie*/
app.use(cookieParser());
app.get("/",function(req,res){
console.log("Cookies: ", req.cookies)
res.send("第一个 Express 框架实例");
});
app.get('/ab*cd', function(req, res) {
console.log("/ab*cd GET 请求");
res.send('正则匹配');
});
app.get("/list",function(req,res){
//console.log(req.app)
console.log("req.hostname:",req.hostname)
console.log("req.ip:",req.ip)
console.log("req.originalUrl:",req.originalUrl)
console.log("req.params:",req.params)
console.log("req.path:",req.path)
console.log("req.protocol:",req.protocol)
console.log("req.query:",req.query)
console.log("req.route:",req.route)
console.log("req.subdomains:",req.subdomains)
console.log("req.get:",req.get)
res.send("list");
});
app.get("/index",function(req,res){
console.log("index请求");
console.log("__dirname:",__dirname);
res.sendFile(__dirname+"/index.html")
});
app.get("/process_get",function(req,res){
console.log("process_get请求");
var info = {
getname:req.query.getname,
getage:req.query.getage
};
res.send(JSON.stringify(info))
});
app.post("/process_post",urlencodedParser,function(req,res){
console.log("process_post请求");
var info = {
postname:req.body.postname,
postage:req.body.postage
};
res.send(JSON.stringify(info))
});
app.post("/file_upload",function(req,res){
var des_file = __dirname+"/"+req.files[0].originalname;
console.log(req.files[0]);
console.log(__dirname)
console.log(des_file);
fs.readFile(req.files[0].path,function(err,data){
if(err) return console.log(err);
fs.writeFile(des_file,data,function(err){
if(err) return console.log(err);
info = {
meg:"file upload success!",
filename:req.files[0].originalname
}
res.end( JSON.stringify( info ) );
})
});
});
var server = app.listen(8082);
console.log("执行http://127.0.0.1:"+server.address().port)
7:GET方法
<form action="/process_get" method="get">
<label for="getname">getname</label> <input type="text" name="getname" id="getname">
<label for="getage">getage</label> <input type="text" name="getage" id="getage">
<input type="submit" value="提交">
</form>
8:POST方法
- post请求需要创建application/x-www-form-urlencoded解析
- var bodyParser = require("body-parser")
- var urlencodedParser = bodyParser.urlencoded({extended:false})
代码:
<form action="/process_post" method="post">
<label for="postname">postname</label> <input type="text" name="postname" id="postname">
<label for="postage">postage</label> <input type="text" name="postage" id="postage">
<input type="submit" value="提交">
</form>
9:文件上传
<form action="/file_upload" method="post" enctype = multipart/form-data>
<input type="file" name="image" id="image">
<input type="submit" value="上传文件">
</form>