在node.js中更改了已定义的变量

时间:2017-11-29 20:45:39

标签: node.js restler

我正面临着一个奇怪的问题。 我在我的代码中定义了一个变量,用它来进行调用然后就这样做了。当我试图再次使用它时,稍后,变量被更改 - 可能是序列化的。 我怎样才能以原始形式取回它?

这是我的代码。

<!DOCTYPE html>
<html> 
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>@ViewBag.Title MM-3</title>
        <link href="@Url.Content("~/Content/bootstrap.css")" rel="stylesheet" type="text/css" />

        @Scripts.Render("~/bundles/modernizr")
        @Scripts.Render("~/bundles/jquery")
        @Scripts.Render("~/bundles/unobtrusive")
        @model IEnumerable<RoboticUI.Models.ResultantRead>
       <script src="https://cdn.jsdelivr.net/jquery.ajax.unobtrusive/3.2.4/jquery.unobtrusive-ajax.min.js"></script>



    <script src="@Url.Content("~/Scripts/kendo.modernizr.custom.js")"></script>    
        <script src="~/Scripts/AutocompleteScript.js"></script>
        <link rel="stylesheet" type="text/css" href="~/Content/MainRobotFrontier.css?version=1" />
    </head>
<body style="font-family:Verdana;">

    <div class="container">
        <header>
            <div class="headerContent">
            <p>Robot Gallery</p>

                </div>
        </header>

        <div class="menu-content" style="overflow:auto">
            <div class="menu">
                @Ajax.ActionLink("Robot", "Robot", "Chart", new AjaxOptions() { UpdateTargetId = "navResult" })
                @Ajax.ActionLink("Data", "Data", "Home", new AjaxOptions() { UpdateTargetId = "navResult" })
                @Ajax.ActionLink("Client", "Client", "Home", new AjaxOptions() { UpdateTargetId = "navResult" })
            </div>
            <div id="navResult" class="main">
                <h2>Lorum Ipsum</h2>
                <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.</p>
            </div>
        </div>

        <footer>Copyright &copy MMM</footer>
    </div>
    @RenderBody()
</body>

</html>

当我尝试再次在const restler = require('restler'); var baas_host = 'hostname'; var baas_app = 'appname'; var access_options = { data: { grant_type: 'client_credentials', client_id: 'id', client_secret: 'secret' } } // Get an access_token var access_token; getAccessToken(function (data_token) { access_token = data_token; }); function getAccessToken(cb) { //****Here is where I see different results****// console.log("access_options::", access_options); restler.post(baas_host+'/'+baas_app+'/token', access_options).on('complete', function (data, response) { cb(data.access_token); }); }; // Refresh if access token expired function refreshAccessToken() { console.log("refreshAccessToken called."); // Call getAccessToken again getAccessToken(function (data_token) { access_token = data_token; }); } 调用中重用access_options时,以下是我在第二次迭代中看到的作为refreshAccessToken()的值

的内容
access_options

请帮助我了解幕后发生的事情?

2 个答案:

答案 0 :(得分:0)

您将access_token声明为模块变量,并通过使每个请求更改它。你需要把他放在一个函数范围内,这样他就会对请求“私有”

答案 1 :(得分:0)

我唯一想到的是restler库正在修改你的对象。尝试使用restler.post之前所需的信息创建一个新对象。类似于access_options_temp