当前位置: 代码迷 >> JavaScript >> 如何将请求参数传递回Angular
  详细解决方案

如何将请求参数传递回Angular

热度:101   发布时间:2023-06-13 11:38:06.0

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

毕竟,您的问题可以归结为:

我的难题是如何呈现此HTML并为用户的Angular代码提供用户JSON对象?

你不知道 通常的情况是只呈现HTML以及呈现初始应用程序所需的资产(隐藏所有内容,无论如何显示初始屏幕)。 进一步的数据(如获取user )由通过Angular的HTTP工具对服务器的API调用处理。 这意味着它们是分开的 调用该API之后,您的应用将确定要呈现的内容。

否则,您可以将HTML中的数据呈现为某些全局变量,然后让Angular从那里获取。 这是一个杂乱的IMO,但是不需要单独的API调用即可获取数据。

从我自己的答案复制到类似的问题

要从服务器到客户端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}

这就是我最终处理这种情况的方式。 我只是创建了一个新的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调用以获取请求参数似乎仍然很奇怪,但它确实有效。 反馈表示赞赏。