如何在JavaScript中将对象的值传递给新的全局变量

时间:2016-07-28 11:24:58

标签: javascript json

我编写了一个由我的Node.js服务器运行的程序,用于与python脚本(源:https://github.com/extrabacon/python-shell)进行交互,该脚本成功地将数据发送到脚本并接收返回的值。 返回的内容(message)(在pyshell.on中)是json,它只显示为传入函数的本地,但我想在我的程序之外的其他地方使用此数据功能。

刚接触javascript我最初尝试将ret_val = message;设置为无效,尝试将类型(python端)更改为字符串(仍未成功),最后将json转换为字符串并解析为ret_val (现在是)ret_val = JSON.parse(JSON.stringify(message));。遗憾的是,这些方法都不起作用,因为ret_val仍未定义,尽管消息明确包含我需要的数据作为对象(使用typeof检查)。我想知道将message变量的内容复制到ret_val以便稍后返回的正确方法,或者如果我使用的话,可能是获取message数据的正确方法这个模块不正确。

见下面的日志

更新:设置run_py_script时,功能ret_val中会出现包含问题的完整脚本。

var express = require('express');
var router = express.Router();
var PythonShell = require('python-shell');

var options = {
    mode: 'json'
};

var rain_data;

function run_py_script(data, callback){
    var pyshell = new PythonShell('dummy.py', options);
    var ret_val;
    pyshell.send("dummy data"); // change to data

    pyshell.on('message', function(message){
        console.log(message);
        rev_val = message;
        //console.log(ret_val["willCollide"]);
    });

    pyshell.end(function(err){
        if (err) {
            console.log("hi");
        }
        return err ? callback(null) : callback(null, ret_val);
    });

}

/* GET rain_track data. */

router.get('/', function(req, res, next) {

    run_py_script(null, function(err, rain_data) {
        console.log(err);
        console.log(rain_data);
        if (err){ console.log("error in python script" ); return res.json(null); }
        if (rain_data == null){
            console.log("Error: data is null or undefined");
        }
        res.json(rain_data);
    })
});

module.exports = router;

日志:

{ willCollide: 1, time: 6000, strength: 'NA' }
null
undefined
Error: data is null or undefined
GET /rain_track 200 62.778 ms - -

0 个答案:

没有答案
相关问题