gpt4 book ai didi

javascript - Node.js 子进程中的数据丢失

转载 作者:搜寻专家 更新时间:2023-11-01 00:42:21 24 4
gpt4 key购买 nike

我正在尝试将数据(作为对象)发送到 Node.js 中的子进程,但是,我的所有正则表达式都在传输过程中丢失了。

var arguments = {
something: {
name: 'test',
age: 28,
active; true
},
otherThing: 'some string',
regex: /test/i,
regex2: new RegExp('test')
};

var child = cp.fork(path.join(__dirname, 'child.js'));

child.on('message', function (data) {
console.log(data);
});

child.send(arguments);

在 child.js 文件中,我在顶部有这个:

process.on('message', function () {
console.log(arguments); // This is where the data has changed
});

当日志从子进程输出时,arguments 对象看起来像这样:

{
something: {
name: 'test',
age: 28,
active: true
},
otherThing: 'some string',
regex: {},
regex2: {}
}

到目前为止无法在其他地方找到任何关于为什么会发生这种情况的信息,有什么想法吗?

最佳答案

因为它们是完全独立的 JavaScript 进程,所以您不能发送对象。当您传递一个对象时,它会序列化为 JSON 并由子对象解析。 (参见 the docs。)

JSON 不支持序列化正则表达式对象。 (尝试将 JSON.stringify(/abc/) 放入您的控制台 - 您会返回 “{}”。)

要在 JSON 对象中包含正则表达式,您可以使用 json-fn模块。它支持序列化函数、日期和正则表达式。 (实际上,由于我提出的一个问题,他们添加了正则表达式支持。:))

然后你可以这样做:

var JSONfn = require('json-fn');
var arguments = {
something: {
name: 'test',
age: 28,
active; true
},
otherThing: 'some string',
regex: /test/i,
regex2: new RegExp('test')
};

var child = cp.fork(path.join(__dirname, 'child.js'));
});

child.send(JSONfn.stringify(arguments));

和:

var JSONfn = require('json-fn');
process.on('message', function (data) {
console.log(JSONfn.parse(data))); // This is where the data has changed
});

关于javascript - Node.js 子进程中的数据丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30255353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com