博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nodejs之express(一)简单实现路由
阅读量:4288 次
发布时间:2019-05-27

本文共 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;
你可能感兴趣的文章
请不要做浮躁的人----(学习编程的忠告)
查看>>
网络_volley_使用方法和代码
查看>>
网络_AsyncHttpClient_使用方法和代码
查看>>
网络_断点续传.断点下载
查看>>
网络_Xutils
查看>>
网络_多线程下载
查看>>
网络_httpClient
查看>>
网络_HttpURLConnection_原始类
查看>>
网络_OKHttp
查看>>
android_事件分发机制_几行代码直接通晓
查看>>
图片_OOM_OutOfMemory
查看>>
技术学习_经验分享
查看>>
android中常见的设计模式有哪些?
查看>>
ViewDragHelper_v4的滑动视图帮助类_解释和代码
查看>>
即时通讯技术- 推送技术协议方案
查看>>
vitamio简介.java
查看>>
ActiveMQ 实现负载均衡+高可用部署方案
查看>>
《搜索和推荐中的深度匹配》——2.5 延伸阅读
查看>>
解读:阿里文娱搜索算法实践与思考
查看>>
基于位置的点击模型
查看>>