问题描述
我目前有一个使用Express和Jade模板的应用程序。 我正在使用带有客户端HTML的Angular构建该应用程序的新版本。
我需要访问某些请求参数才能确定我的Angular代码中的用户权限。 我的问题是我不知道如何在我的Angular控制器/服务中获取这些参数。
以下是Express中具有Jade结构的当前情况:
route.js:
router.get('/player/:id',
playerRoute.show
);
player.js:
var show = function(req, res) {
res.render('player', {user: req.user});
};
...现在是我新版本的处理程序:
var player = function(req, res) {
//res.sendFile(path.join(__dirname, '../v2', 'index.html'));
res.json({user: req.user});
};
上面的代码将正确的用户JSON发送回我的客户端。
res.json
且取消注释res.sendFile
将呈现正确的HTML。
我的难题是如何呈现此HTML并为user
Angular代码提供user
JSON对象?
1楼
毕竟,您的问题可以归结为:
我的难题是如何呈现此HTML并为用户的Angular代码提供用户JSON对象?
你不知道
通常的情况是只呈现HTML以及呈现初始应用程序所需的资产(隐藏所有内容,无论如何显示初始屏幕)。
进一步的数据(如获取user
)由通过Angular的HTTP工具对服务器的API调用处理。
这意味着它们是分开的 。
调用该API之后,您的应用将确定要呈现的内容。
否则,您可以将HTML中的数据呈现为某些全局变量,然后让Angular从那里获取。 这是一个杂乱的IMO,但是不需要单独的API调用即可获取数据。
2楼
从我自己的答案复制到类似的问题
要从服务器到客户端javascript获取变量,请尝试将json字符串模板化为html并从javascript加载它。
EJS可以处理引号转义,我认为Jade也可以。
对于参考content!= safeString
告诉Jade跳过转义,内容!{safeString}
。
- var user={id:1, displayName:'foo'}
#example
meta(data-userJSON=JSON.stringify(user))
script(src="//code.jquery.com/jquery-1.11.3.min.js")
script.
var user = JSON.parse(
$('#example meta').attr('data-userJSON')
)
console.log(user);
span #{user.id}
span #{user.displayName}
3楼
这就是我最终处理这种情况的方式。 我只是创建了一个新的API终结点,可以使用Angular服务轻松实现它。 这是节点设置:
route.js:
router.get('/currentUser',
apiController.currentUser.index
);
currentUser.js:
var index = function(req, res) {
res.json({user: req.user});
};
module.exports = {
index: index
};
对我来说,进行API调用以获取请求参数似乎仍然很奇怪,但它确实有效。 反馈表示赞赏。