zoukankan      html  css  js  c++  java
  • app.use和app.get的区别及解析

    转载至:http://blog.csdn.net/wthfeng/article/details/53366169

    写在前面:最近研究nodejs及其web框架express,对app.useapp.get没理解清,以致踩了坑浪费不少时间,我根据自己实践及总结出此博客,若有错误还请大家多多指教。

    结论

    先说我发现的结论:

    app.use(path,callback)中的callback既可以是router对象又可以是函数

    app.get(path,callback)中的callback只能是函数

    结论说完,让我们先看个栗子

    例子

    app.js

    var express = require('express');
    var app = express();
    
    var index = require('./routes/index');
    
    //1⃣️
    app.use('/test1',function(req,res,next){
        res.send('hello test1');
    
    });
    
    //2⃣️
    app.get('/test2',function(req,res,next){
        res.send('hello test2');
    
    });
    
    //3⃣️
    app.get('/test3',index);
    
    //4⃣️
    app.use('/test4',index);

    index是一个路由对象,结果,例1、2、4结果都能正确显示,而例3却报404。index.js很简单,如下:

    var express = require('express');
    var router = express.Router();
    
    router.get('/', function(req, res, next) {
      res.send('hello world!');
    });
    
    module.exports = router;

    两者关系

    这说明,给app.get(app.post、app.put同理)赋个路由对象是不行的,其实,可以将app.get()看作app.use的特定请求(get)的简要写法。即

    var express = require('express');
    var app = express();
    app.get('/hello',function(req,res,next){
        res.send('hello test2');
    
    });

    等同于:

    var express = require('express');
    var app = express();
    var router = express.Router();
    
    router.get('/', function(req, res, next) {
      res.send('hello world!');
    });
    app.use('/hello',router);

    什么时用

    那么,什么时用app.use,什么时用app.get呢?

    路由规则是app.use(path,router)定义的,router代表一个由express.Router()创建的对象,在路由对象中可定义多个路由规则。可是如果我们的路由只有一条规则时,可直接接一个回调作为简写,也可直接使用app.getapp.post方法。即

    当一个路径有多个匹配规则时,使用app.use,否则使用相应的app.method(get、post)

    对express路由的解析可参考Express.js 4.0 的路由(Router)功能用法教學,觉得比官网说的清楚。

  • 相关阅读:
    对类对象使用new时地址分配的情况
    c++堆与栈的简单认识
    多态公有继承
    Cookie & Session & JSP入门
    Response & ServletContext
    Java网络编程篇文章阅读顺序
    URL编程
    UDP网络编程
    TCP网络编程
    InetAddress类的使用
  • 原文地址:https://www.cnblogs.com/zjx2011/p/6376184.html
Copyright © 2011-2022 走看看