如何修复Mongoose界面中的ObjectParameterError错误

时间:2019-01-22 06:45:43

标签: javascript node.js mongodb mongoose

我试图将String对象传递给该函数,以在MongoDB中创建一个条目。当数据来自HTTP post时,此接口可以正常工作,但如果数据来自Websocket,则此接口不起作用。

此代码无法正常工作,并引发ObjectParameterError错误。

wss.on('connection', ws => {
   ws.on('message', message => {
   console.log(`Received message => ${message}`);
   console.log(typeof(message));
   console.log(message.constructor.name);  ==> prints String class
   Fnode.create(message, function (err, post) {
       if (err) console.log(`Received error => ${err}`);
       console.log(`Received post => ${post}`);
   });
 });
});

错误是:

Received message => 
 {"ptName":"java","agentId":"localhost.localdomain","tId":4442,"evType":"thread start","desc":"tomcat process","ptId":1,"evId":"clone","tStamp":"2019-01-13T05:47:48.253639314Z","tName":"java"}
    string
    String
    Received error => ObjectParameterError: Parameter "obj" to Document() must be an object, got 
 {"ptName":"java","agentId":"localhost.localdomain","tId":4442,"evType":"thread start","desc":"tomcat process","ptId":1,"evId":"clone","tStamp":"2019-01-13T05:47:48.253639314Z","tName":"java"}

此代码运行正常。

router.post('/', function(req, res, next) {
console.log(`Received message => ${req.body}`);
console.log(typeof(req.body));
console.log(req.body.constructor.name);  ==> prints Object class
   Fnode.create(req.body, function (err, post) {
   if (err) return next(err);
   res.json(post);
 });
});

1 个答案:

答案 0 :(得分:0)

WebSockets支持发送和接收:字符串,类型数组(ArrayBuffer)和Blob。发送之前,必须将Javascript对象序列化为上述类型之一。 用于发送对象的方法是:

ws.send(JSON.stringify(object));

ws.send(BSON.serialize(object));

当您收到Web套接字消息时,您将需要反序列化它。并将其转换为JSON

    wss.on('connection', ws => {
       ws.on('message', message => {
       message = JSON.parse(message);
       console.log(`Received message => ${message}`);
       console.log(typeof(message));
       console.log(message.constructor.name);  ==> prints String class
       Fnode.create(message, function (err, post) {
           if (err) console.log(`Received error => ${err}`);
           console.log(`Received post => ${post}`);
       });
     });
    });