如何在客户端访问服务器设置的对象

时间:2016-12-03 18:52:19

标签: javascript node.js express

我正在使用nodeexpress,我想要服务器发送的访问对象。 例如

服务器端:

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有了,我可以让你把手{{}}来获取它。

5 个答案:

答案 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()

https://docs.angularjs.org/guide/controller

答案 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}}}")