●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(前端视图模板):
登录页面