使用Node.js将对象转换为字符串时出现类型错误

时间:2017-01-04 09:44:00

标签: javascript node.js

尝试使用Node.js / Javascript将对象转换为字符串时出现以下错误。

TypeError: Converting circular structure to JSON
    at Object.stringify (native)
    at exports.userlogin (/opt/lampp/htdocs/FGDP/route/route.js:11:19)
    at Layer.handle [as handle_request] (/opt/lampp/htdocs/FGDP/node_modules/express/lib/router/layer.js:95:5)
    at next (/opt/lampp/htdocs/FGDP/node_modules/express/lib/router/route.js:131:13)
    at Route.dispatch (/opt/lampp/htdocs/FGDP/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/opt/lampp/htdocs/FGDP/node_modules/express/lib/router/layer.js:95:5)
    at /opt/lampp/htdocs/FGDP/node_modules/express/lib/router/index.js:277:22
    at Function.process_params (/opt/lampp/htdocs/FGDP/node_modules/express/lib/router/index.js:330:12)
    at next (/opt/lampp/htdocs/FGDP/node_modules/express/lib/router/index.js:271:10)

我正在解释下面的代码。

exports.userlogin=function(req,res){
    var username=req.body.user_name;
    var password=req.body.user_pass;
    var ciphertext = CryptoJS.AES.encrypt(password, 'lexelPass');
    var pass=JSON.stringify(ciphertext);
}

这里我得到ciphertext变量数据类型是对象,我需要它转换为字符串。但在这里我遇到了这种错误。

2 个答案:

答案 0 :(得分:2)

CryptoJS.AES.encrypt(password, 'lexelPass')语句返回的对象是循环类型。循环类型类似于

var obj = {};
obj.obj = obj;

因此,为了解决这个问题,我们可以在JSON.stringify中使用replacer回调函数作为第二个参数。通过在循环器功能中放置用于丢弃圆形对象的逻辑。

check syntax at MDN for replacer

答案 1 :(得分:0)

您可能希望使用aapt方法将apt转换为字符串。

ciphertext

如果您真的要对WordArray.toString([encoding])进行字符串化,可以使用util.inspect(object[, options])自动使用字符串var pass = ciphertext.toString(); 替换循环引用,而不是抛出错误,但请记住{{1}特定于Node。