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>

10:Cookie管理

posted on 2016-05-10 14:58  借个火点烟  阅读(690)  评论(0编辑  收藏  举报