如何将请求参数传递回Angular

时间:2015-07-17 14:25:57

标签: javascript angularjs node.js http express

我目前有一个使用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对象?

3 个答案:

答案 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调用仍然很奇怪,但它确实有效。反馈意见。