目前我在Express应用程序中使用控制器来处理路由。当某条路线被点击时,我会拨打pagesController.showPlayer
,为index.html
提供服务。这是控制器:
'use strict';
var path = require('path');
var player = function(req, res) {
res.sendFile(path.join(__dirname, '../assets', 'index.html'));
};
module.exports = {
player: player
};
我还需要发回一个JSON对象,表示请求此路由的用户。
但是,当我添加res.json({user: req.user});
时,我得到的是这个JSON对象,index.html
不再显示。
答案 0 :(得分:7)
res.json()
表示Express应用在收到HTTP请求时发送的HTTP响应。另一方面,res.sendFile()
在给定路径上传输文件。
在这两种情况下,流程基本上都转移给可能已发出请求的客户。
所以不,你不能一起使用res.sendFile
和res.json
。
但是,您确实没有什么办法来达到预期的目标:
res.sendFile具有以下签名:
res.sendFile(path [, options] [, fn])
其中path
必须是文件的绝对路径(除非在options对象中设置了root选项)。
在options
中,您可以指定包含要与文件一起提供的HTTP标头的object
。
示例:
var options = {
headers: {
'x-timestamp': Date.now(),
'x-sent': true,
'name': 'MattDionis',
'origin':'stackoverflow'
}
};
res.sendFile(path.join(__dirname, '../assets', 'index.html'), options);
这确实是你能够做到最接近所期望的任务。还有其他选择..
res.json
)并在客户端管理路由(而nodejs将作为API端),或希望它有帮助!