我试图将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);
});
});
答案 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}`);
});
});
});