本文共 5811 字,大约阅读时间需要 19 分钟。
express的中间件有:
Express 4.0 Name
:解析请求体,相当于cntent-type设置;
:压缩;
:morgan是express默认的日志中间件,也可以脱离express,作为node.js的日志组件单独使用;
:设置cookie;
:设置session;
(server-favicon):serve-favicon的中间件,可以用于请求网页的logo。就是地址栏中网址前面出现的小图片;
:响应时间
:错误回调
:HTTP伪造中间件
:请求超时中间件
:虚拟二级域名映射中间件
:跨域请求伪造保护中间件
安装:npm install express -g
参考:
参考二:
api文档:
nodejs文档:
===========app.js=============
var express = require('express');var app = express();//创建express实例var routes=require('./routes/routes.js');//吧路由引入; ./ 代表项目的当前总目录 /Users/wofu/Desktop/noderoutes.router(app);//调用路由var server = app.listen(8081, function () { var host = server.address().address var port = server.address().port console.log(__dirname);//这里的目录就是/Users/wofu/Desktop/node,其中node文件夹我是直接放在了桌面console.log(host);//主机地址console.log(port);//端口号 console.log("应用实例,访问地址为 http://%s:%s", host, port)})
============routes.js=========路由的实现(三种方法)=======中间件的使用===
var router = function(app){ //*********路由实现方法一,一个一个分别写出来************** // app.get('/one', function(req, res){ // console.log("第一个网页"); // res.send("diyi") // // res.render('../views/one.html'); // }); // // app.get('/two', function(req, res){ // console.log("第二个网页"); // res.send("dier") // // res.render('../views/two.html'); // }); // // 对页面 abcd, abxcd, ab123cd, 等响应 GET 请求,*号代表占位 // app.get('/ab*cd', function(req, res) { // console.log("/ab*cd GET 请求"); // res.send('正则匹配'); // })//用use注册中间件 // app.use(function (req,res,next) { // 设置404页面,如果路由不存在,就执行这个监听 // res.status(404); // res.send('404 - Not Found') // })//***********路由实现方法二:用use注册中间件,根据req。url来判断分发路由******* //use是express注册中间件的方法,它返回一个函数,如果注册了两个中间件。收到HTTP请求后, //先调用第一个中间件,在控制台输出一行信息,然后通过next方法,将执行权传给第二个中间件, //输出HTTP回应。由于第二个中间件没有调用next方法;所以request对象就不再向后传递了。 // use方法内部可以对访问路径进行判断,据此就能实现简单的路由,根据不同的请求网址,返回不同的网页内容。 // app.use(function(req, res, next) { // // if (req.url == "/one") { // console.log(req.url);// // res.writeHead(200, { "Content-Type": "text/plain" }); // console.log("useluyou"); // res.end("ddddd") // } else { // next(); // } // });//********路由实现方法三:用use注册中间件,第一个参数填写路径*********** // 除了在回调函数内部判断请求的网址,use方法也允许将请求网址写在第一个参数。 // 这代表,只有请求路径匹配这个参数,后面的中间件才会生效。 app.use("/two", function(request, response, next) { response.writeHead(200, { "Content-Type": "text/plain" }); response.end("Welcome to the about page!\n"); }); app.use(function(request, response) { response.writeHead(404, { "Content-Type": "text/plain" }); response.end("404 error!\n"); }); // use还有一些别名,如all表示所有请求都必须通过该中间件,参数中的“*”表示对所有路径有效。 // get方法则是只有GET动词的HTTP请求通过该中间件,它的第一个参数是请求的路径。 // 如果get方法的回调函数没有调用next方法,只要有一个中间件被调用了,后面的中间件就不会再被调用了。 // 除了get方法以外,Express还提供post、put、delete方法,即HTTP动词都是Express的方法。 app.all("*", function(request, response, next) { response.writeHead(200, { "Content-Type": "text/plain" }); next(); });};exports.router = router;
//*************路由方式一***********
创建服务器:
var express = require('express');var app = express();//创建express实例var routes=require('./routes/get.js');//吧路由引入; ./ 代表项目的当前总目录 /Users/wofu/Desktop/node// var routes=require('./routes/post.js');//吧路由引入; ./ 代表项目的当前总目录 /Users/wofu/Desktop/noderoutes.router(app);//调用路由var server = app.listen(8081, function () { var host = server.address().address; var port = server.address().port; console.log(__dirname);//这里的目录就是/Users/wofu/Desktop/node,其中node文件夹我是直接放在了桌面console.log(host);//主机地址console.log(port);//端口号 console.log("应用实例,访问地址为 http://%s:%s", host, port);});
路由:
var router = function(app){ var url = require('url'); app.get('/get', function (req, res) { // res.writeHeader(200, {'Content-Type':'text/html;charset=UTF-8'}); // res.writeHeader(200, {'Content-Type':'text/plain;charset=UTF-8'}); res.writeHeader(200, {'Content-Type':'application/json;charset=UTF-8'}); // res.writeHeader(200, {'Content-Type':'text/json;charset=UTF-8'});//************获取参数和urlconsole.log(req.url);//******结果: /get?age=20&name=lambo console.log(url.parse(req.url).pathname);// ***结果:/get ***需要先引入 var url = require('url'); console.log(url.parse(req.url).query);// ***结果:age=20&name=lambo *** 需要先引入 var url = require('url'); console.log(req.query);//{ name: 'lambo', age: '20' } console.log(req.query.name);//lambo//************ // 输出 JSON 格式 var json = JSON.stringify({ msg:"成功", result:[{ "name":"菜鸟教程", "site":"http://www.runoob.com" },{ "name":"新手教程", "site":"csdnnnn" }], status:1});// res.write(json);//如果要在浏览器上显示就用这个,并且还要加上res.end()方法;否则网页一直在加载;res.end(json);//如果要传给前端数据(这时就不能执行 res。write() 方法),一定要用这个方法,这个方法也可以在浏览器上显示; })//************post请求*********var bodyParser = require('body-parser');//解释参考http://blog.csdn.net/yanyang1116/article/details/54847560// 创建 application/x-www-form-urlencoded 编码解析var urlencodedParser = bodyParser.urlencoded({ extended: false })app.post('/post', urlencodedParser, function (req, res) {//第二个参数是用一种解析方式解析console.log(req.body);//{ age: '20', name: 'lambo' }---body是从客户端传过来的参数console.log(req.body.name);//lambo----参数name的值// 输出 JSON 格式var json = JSON.stringify({ msg:"成功", result:[{ "name":"菜鸟教程", "site":"http://www.runoob.com" },{ "name":"新手教程", "site":"csdnnnn" }], status:1});// res.write(json);//如果要在浏览器上显示就用这个,并且还要加上res.end()方法;否则网页一直在加载;res.end(json);//如果要传给前端数据(这时就不能执行 res。write() 方法),一定要用这个方法,这个方法也可以在浏览器上显示;});//**************找不到路由时的处理 app.use(function (req,res,next) { // 设置404页面,如果路由不存在,就执行这个监听 res.status(404); res.send('404 - Not Found') });};exports.router = router;