Express:如何在app.get()之外创建函数?

时间:2018-09-26 10:05:15

标签: node.js express routes global-functions

像这样的事情对我不起作用:

function renderSite1() {
    return res.render('site.html');
}

app.get('/overview', function(req, res) {
    renderSite1();
}

如何保持路由的清洁和外部加载功能?

2 个答案:

答案 0 :(得分:2)

您可以像这样使用它:

app.js

var campgroundRoutes      = require("./routes/campgrounds"),
    commentsRoutes        = require("./routes/comments"),
    indexRoutes            = require("./routes/index");

app.use(indexRoutes);
app.use("/campgrounds" , campgroundRoutes);
app.use("/campgrounds/:id/comments" , commentsRoutes);

index.js

var express = require("express");
var router = express.Router();

//------------------------------------------------------------------------------
//                               HOMEPAGE
//------------------------------------------------------------------------------

router.get("/" , function(req,res){
    res.render("landing");
});

module.exports = router;

答案 1 :(得分:1)

  

Id不起作用,因为res的范围是概述中间件,但是render继承了没有声明res的全局范围。

您可以做的是将req作为renderSite1()的参数传递,但这并不总是很干净。

我喜欢做的是:

  

创建一个函数,该函数返回固定要求的新函数

function renderModule(res) { // it will be fixed for all the functions
   function renderSite1() {
     res.render() // visible
   }

   function renderSite2() {
     res.render() // visible
   }

   return {
     renderSite1,
     renderSite2
   }
}

这种技术称为显示模块模式

@artidokuz在答案中写的也是一种很好的方法,使用中间件划分应用程序。