nodejs之express(一)简单实现路由

express的中间件有:

Express 4.0 Name

body-parser:解析请求体,相当于cntent-type设置;

compression:压缩;

cookie-session

Morgan:morgan是express默认的日志中间件,也可以脱离express,作为node.js的日志组件单独使用;

cookie-parser:设置cookie;

express-session:设置session;

static-favicon(server-favicon):serve-favicon的中间件,可以用于请求网页的logo。就是地址栏中网址前面出现的小图片;

response-time:响应时间

errorhandler:错误回调

method-override:HTTP伪造中间件

connect-timeout:请求超时中间件

vhost:虚拟二级域名映射中间件

csurf:跨域请求伪造保护中间件


安装:npm install express -g

参考:https://www.cnblogs.com/mq0036/p/5243312.html

http://javascript.ruanyifeng.com/nodejs/express.html

参考二:http://ourjs.com/detail/56b2a6f088feaf2d031d2468

api文档:http://www.expressjs.com.cn/4x/api.html

nodejs文档:https://nodejs.org/dist/latest-v9.x/docs/api/https.html

===========app.js=============

var express = require('express');
var app = express();//创建express实例
var routes=require('./routes/routes.js');//吧路由引入;  ./ 代表项目的当前总目录 /Users/wofu/Desktop/node

routes.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/node
routes.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'});

//************获取参数和url
console.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;


你可能感兴趣的:(nodejs)