【问题标题】:Express.js res.render and res.jsonExpress.js res.render 和 res.json
【发布时间】:2015-03-18 11:03:03
【问题描述】:

我对 express.js 有一些问题。我想在第一次请求时渲染我的模板,然后从路由中获取一些数据。我的路由看起来像:

app.use(function (req, res, next) {
 res.render('index.jade');
 next();
});

app.get('/', function(req, res){  
  res.json({a:1});
})

app.get('/contacts', function(req, res){  
  res.json({a:1});
})

app.get('/emails', function(req, res){  
  res.json({a:1});
})

问题是我所做的每个请求,都通过我的中间件设置对 html/text 的响应,而我无法访问其他路由。 Mb 有人知道我如何只渲染一次模板,然后才能到达其他路线(我尝试使用 express 和骨干进行 SPA)

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    解决方案 你把jade转成html,把index.html文件放到public文件夹里

    启用快速静态文件服务

    app.use(express.static('public'));
    

    define 和其他特定路由返回静态文件和 api,如 (api|css|js)

        app.route('/:url(api|css|js)/*')
           .get(function (req, res) {
              var viewFilePath = '404';
              var statusCode = 404;
              var result = {
                status: statusCode
              };
    
              res.status(result.status);
              res.render(viewFilePath, function (err) {
                if (err) { return res.json(result, result.status); }
        // 404.jade file
                res.render(viewFilePath);
              });
            });
    
          // All other routes should redirect to the index.html
          app.route('/*')
            .get(function(req, res) {
    // SPA index  file
              res.sendfile('/public/index.html');
            });
    

    现在你可以使用

    app.get('/api/emails', function(req, res){  
      res.json({a:1});
    });
    app.get('/api/contacts', function(req, res){  
      res.json({a:1});
    });
    

    【讨论】:

    • '/api/emails' 这个路由在结果中使用了这个 /:url(api|css|js)/* 条件,我做错了什么?
    • app.route('/:url(api|css|js)/*') 文件夹代码块找到路由。如果不可用,则抛出 404。对于所有其他情况 app.route('/*') 它返回 index.html 文件。并且此代码附加在末尾。这段代码之前定义的所有路由。
    猜你喜欢
    • 2016-06-13
    • 2019-07-02
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 2013-03-02
    相关资源
    最近更新 更多