2

我试图理解我们什么时候需要在我们的节点 Express中使用app.use

在网上搜索时,我在reddit 上偶然发现了这个答案,说明了app.get 和 app.use之间的区别

基于此,我能够总结出以下几点。

app.use充当超级路由还是中间件?意味着它在下面/之后写的每条路线上都会被调用app.use

此外,如果有人可以添加有关 app.use 的更多信息/实践,我将不胜感激。

4

3 回答 3

7

将 ExpressJS 与 NodeJS 一起使用时,您可以使用app.getapp.use用于几个有用的方面。

初始化您的 App 后let app = express();,您可以在下面找到一些示例:

应用程序.use(...)

正如您正确指出的那样,它对“中间件”很有用,它将适用于您指明后记的所有 GET、POST 等。例如,您只能在想要“使用用户/通过身份验证”的 GET 之前使用中间件。

  • 指示静态内容的文件夹:app.use(express.static(__dirname + "/public"));

  • 包括 JSON 内容的解析器:app.use(bodyParser.json());

  • 定义“Cookie Parser”签名字符串:app.use(cookieParser("Signing text example"));

  • 不同文件中的 URL 的单独路由器:app.use("/api", apiRouter);app.use("/news", newsRouter);app.use("/", siteRouter);

  • 对于自定义错误处理程序:app.use(sites404handler);app.use(globalErrorHandler);

应用程序.get(...)

在谈论时,app.get(...)您是在指示将通过 GET 方法访问哪些 URL。但是您可以在这里使用几个选项:

  • 表明你有一个主页:app.get("/", function(req, res) { res.send("Hello world!"); });

  • 接受 POST 请求:app.post("/", function(req, res) { res.send("Hello world! With POST call."); });

  • 您还可以将其作为“apiRouter.js”分隔在另一个文件中并包含在其中:let router = express.Router(); router.route("/books").get(function(req, res) { res.send("/api/books/ called via a Router"); });

app.set(...)

请记住,您也可以选择app.set(...)。例如,这对于定义像 Handlebars(.hbs 文件)这样的视图引擎很有用。

希望这可以帮助!

于 2018-10-14T13:33:03.127 回答
2
  1. 用于静态路径

    //Set static path
    app.use(express.static(__dirname + '/public'));
    
  2. 用作路由器

    //user
    app.use('/', require('./controllers/user'));
    
  3. 用于handline中间件

    //Body-parser
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({
        extended: true
    }));// Body parser use JSON data
    
  4. 用于自定义中间件

    // force https
    app.use ( (req, res, next) =>{
        if (req.secure) {
            // request was via https, so do no special handling
            next();
        } else {
            // request was via http, so redirect to https
            res.redirect('https://' + req.headers.host + req.url);
        }
    });
    
于 2018-10-14T12:37:54.273 回答
1

app.get路由处理程序适用于 GET 请求,适用于指定路径或所有路径:

使用指定的回调函数将 HTTP GET 请求路由到指定路径。

app.use中间件适用于所有请求,无论是指定路径还是所有路径:

在指定路径挂载指定的中间件函数或函数:当请求路径的基匹配路径时执行中间件函数。

use用于将某些逻辑(中间件)应用于特定路由或整个应用程序,而不管请求方法如何。

于 2018-10-14T12:36:44.910 回答