我正在使用node
和express
,我想要服务器发送的访问对象。
例如
服务器端:
router.get('/some_page/', (req, res) => {
res.render('some_page', {
data: {"somevar1":"somevalue", "somevar2":"somevalue2"}
});
});
客户端javascript:
var objSentFromSrv = ??? // here i want this object and then perform some action on it
这可能/合法吗?
修改
我正在使用handlebars
作为模板引擎。
以某种方式想出来。
function middlewareAppendingLocals(req, res, next) {
res.locals.layoutV = myValue;
next();
}
router.post('/page/', middlewareAppendingLocals, (req, res) => {
res.render('page_to_render');
});
在我的情况下,这个变量来自数据库,我根据从antoher页面发布的id给出它。但是我怎样才能从javascript访问它,而不仅仅是形成.hbs布局文件。
然后page_to_render有了,我可以让你把手{{}}来获取它。
答案 0 :(得分:1)
您需要将对象编码为JSON,如下所示:
router.get('/some_page/', (req, res) => {
res.send(JSON.stringify({
data: {"somevar1":"somevalue", "somevar2":"somevalue2"}
}));
});
然后在前端使用AJAX,使用jQuery可以使用
$.get('/some_page/', function(data) {
var objSentFromSrv = JSON.parse(data);
});
或更短:
$.getJSON('/some_page/', function(data) {
var objSentFromSrv = data;
});
答案 1 :(得分:1)
是。这是可能的,合法的。假设您使用的是EJS,请在模板中添加如下所示的行:
<script>
const objSentFromSrv = <%-JSON.stringify(data)%>;
</script>
如果您使用的是不同的模板引擎,则只需要查找有关如何序列化对象的特定语法。
AjAX对于这个用例来说太过分了。
答案 2 :(得分:0)
如果您使用AngularJS作为前端服务,您可以创建一个控制器并让它注入$scope
和$http
来获取数据。例如:
var app = angular.module('myApp', []);
app.controller('mainController', ($scope, $http) => {
$scope.data= {};
$scope.getData = function() {
$http.get('/some_route/')
.success((data) => {
$scope.data = data;
console.log(data);
})
.error((error) => {
console.log(error);
});
};
});
然后在前端,拨打getData()
。
答案 3 :(得分:0)
您的模板引擎将采用传递给该渲染调用的参数并生成HTML(通常)或JSON。它并不是真正发送对象,只是文本数据。
如果您希望更改服务器端存在的某个对象的状态,您需要创建某种API来执行此操作。将数据发送到客户端,对该数据进行更改,然后将其发送回服务器以合并到原始对象中。
答案 4 :(得分:0)
我正在使用Handlebar js,发现仅使用{{{服务器端JSON}}就可以在客户端Javascript上获取服务器端数据
服务器端代码在客户端发送JSON adminData
return h.view('reports' ,{ adminData: request.auth.credentials});
在脚本标记内获取adminData的客户端代码
console.log("{{{adminData}}}")