我目前有一个使用Express with Jade模板的应用程序。 我正在使用Angular和客户端HTML构建新版本的应用程序。
我需要访问某些请求参数才能确定Angular代码中的用户权限。我的问题是我不知道如何在我的Angular控制器/服务中获得这些参数。
以下是Express中使用Jade结构时出现的内容:
routes.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并为我的客户端Angular代码提供user
JSON对象?
答案 0 :(得分:1)
毕竟,你的问题归结为:
我的困境是如何渲染这个HTML并使用用户JSON对象提供我的客户端Angular代码?
你没有。通常的情况是只渲染HTML以及渲染初始应用程序所需的资源(隐藏所有内容,显示任何闪屏)。更多数据(比如获取function something() {
console.log("You called that function");
}
)是通过Angular的HTTP工具对您的服务器进行API调用来处理的。这意味着它们是分开的。在该API调用之后,您的应用确定要呈现的内容。
否则,您可以将HTML中的数据渲染为某个全局变量,并让Angular从那里获取它。这是凌乱的IMO,但不需要单独的API调用来获取数据。
答案 1 :(得分:0)
从我自己的回答复制到类似的问题
要从服务器获取变量到客户端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}
答案 2 :(得分:0)
以下是我最终处理这种情况的方法。我只是创建了一个新的API端点,我可以轻松地使用Angular服务。这是节点设置:
routes.js:
router.get('/currentUser',
apiController.currentUser.index
);
currentUser.js:
var index = function(req, res) {
res.json({user: req.user});
};
module.exports = {
index: index
};
对我来说,获取请求参数的API调用仍然很奇怪,但它确实有效。反馈意见。