Node.js express框架中间件, 应用级中间件(路由过滤),内置中间件(静态路由托管),第三方中间件(处理post请求)

GET请求的参数在URL中,在原生Node中,需要使用url模块来识别参数字符串。在Express中,不需要使用url模块了。可以直接使用req.query对象获取参数。

POST请求在express中不能直接获得数据,必须使用body-parser模块。使用后,将可以用req.body得到参数。但是如果表单中含有文件上传,那么还是需要使用multiparty模块或者formidable模块。


中间件.js:

var express=require('express');
var app=new express();

// 中间件
app.use('/admin', function(req, res, next) {  // 中间件use匹配的路由不是精确匹配  /admin和/admin/xxxx都可以匹配到该中间件
    console.log(req.originalUrl); //  /admin/new
    console.log(req.baseUrl); //  /admin
    console.log(req.path); //  /new
    next();  // 将路由继续向下传递
});

// 普通路由
app.get('/news',function(req,res){  // 精确匹配路由 /news
    res.send('新闻路由');
});

app.listen(3001,'127.0.0.1');

应用级中间件.js:

/**
    中间件:就是匹配路由之前和匹配路由之后做的一系列的操作。
        匹配路由之前(类似父类的构造函数),路由过滤,检查是否登录,权限过滤 (应用级中间件)
        匹配路由之后(类似析构函数),未匹配到任何路由(404页面路由)(错误处理中间件)
 */

var express=require('express'); /*引入*/
var app=new express();  /*实例化*/

/*
中间件 表示匹配任何路由
应用级中间件
next()  路由继续向下(过滤)匹配
* */
app.use(function(req,res,next){
    console.log(new Date());
    next();  //路由继续向下匹配
});

app.get('/news',function(req,res){
    res.send('新闻路由');
});

//匹配所有的路由  404  (匹配到正确的路由后会res.send() 没有next())
app.use(function(req,res){
    console.log("404");
    res.status(404).send('这是404 表示路由没有匹配到');   // 可以设置响应码。
});

app.listen(3001,'127.0.0.1');

内置中间件.js(静态路由托管):
var express=require('express'); /*引入*/
var app=new express();  /*实例化*/

//内置中间件  托管静态页面
//http://127.0.0.1:3001/css/style.css
app.use(express.static('public'));   //会去public文件夹下找静态资源。 请求地址 /aaa.jpg

//http://127.0.0.1:3001/static/css/style.css
app.use('/static',express.static('public'));  //虚拟目录配置静态web服务。 请求地址 /static/aaa.jpg

app.get('/',function(req,res){
    res.send('你好express');
})

app.listen(3001,'127.0.0.1');
第三方中间件.js(处理post请求):
/**
 body-parser 中间件 第三方的 获取 post 提交的数据  (模块) 。如果表单中有文件上传需要用 multiparty(cnpm install multiparty --save)
 1.cnpm install body-parser --save
 2.var bodyParser = require('body-parser')
 3.设置中间件
// parse application/x-www-form-urlencoded
 app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
 app.use(bodyParser.json())

 4.req.body 获取数据
 */

var express=require('express'); 
var bodyParser = require('body-parser');
var app=new express();  

//配置body-parser中间件
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json());

//配置ejs模板引擎
app.set('view engine','ejs');

app.get('/',function(req,res){
    res.send('你好express');
})

app.get('/login',function(req,res){
    res.render('login');  //ejs模板引擎渲染 views/login.ejs 视图模板  //app.set('views','newpath');  设置ejs模板文件位置,默认是views目录。
})

app.post('/doLogin',function(req,res){
    console.log(req.body);   //获取post提交的数据
})

app.listen(3001,'127.0.0.1');

views/login.ejs(前端视图模板):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <title></title>
</head>
<body>
<h2>登录页面</h2>

<form action="/doLogin" method="post">
    用户名:<input type="text" name="username"/><br/><br/>
    密 码:<input type="password" name="password"/><br/><br/>
    <input type="submit" value="登录"/>
</form>
</body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值