Express.js res.render和res.json

时间:2015-03-18 11:03:03

标签: javascript node.js express

我对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的响应,而我无法进入其他路径。有些人知道我怎么只能渲染一次模板,而不是能够到达其他路径(我尝试用快速和骨干做SPA)

1 个答案:

答案 0 :(得分:2)

<强>解决方案 您将jade转换为html并将 index.html 文件放在公用文件夹

启用快速静态文件服务

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});
});