我对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)
答案 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});
});