javascript - Socket.io - 如果 "client"发出错误数据,防止服务器崩溃

标签 javascript node.js validation sockets socket.io

目前我正在使用node.js 和socket.io 开发一个项目。

如果想知道是否有任何方法可以自动验证客户端发送到服务器的数据。我不想对我想在正在进行的函数中使用的每个变量使用 if (!...) return; 来验证数据。

例如,我在 server.js 上有以下代码

socket.on('haveData', function(data) {
    db.query('SELECT * FROM user WHERE userid = ? LIMIT 1', [data.userid], function(errData, results, fields) {
        if (!errData && results.length) {
            ...
        }
    });
});

但是现在,如果我在浏览器的控制台中输入socket.emit('haveData');,socket.io 服务器就会崩溃 - 当然,没有数据发出

TypeError: Cannot read property 'userid' of undefined

最佳答案

您可以使用Joi https://github.com/hapijs/joi .

Joi 允许您定义输入数据的架构并使用 Joi.validate 方法对其进行验证(示例:https://github.com/hapijs/joi#example)。

Socket.on('event',function(data,callback){}) 接受回调函数,它可用于将错误消息传递回客户端。

示例代码:

const Joi = require('joi');

socket.on('data',function(data,callback){

    const schema = Joi.object().keys({
        userid : Joi.string().trim().required()
    })

    Joi.validate(data, schema, function (err, value) {
        if(err){
            //Error will be sent back to the client who emitted the event
            callback(err)
        }else{
            //Do  your stuff 
        }
    })
})

关于javascript - Socket.io - 如果 "client"发出错误数据,防止服务器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47349402/

相关文章:

javascript - DELETE 后计算行顺序

JavaScript倒计时弹出窗口

javascript - NodeJS 函数在 ajax 调用上不返回响应

javascript - onblur 不起作用,但 onchange 起作用吗?

php - 在 PHP 中验证选择下拉数组

javascript - 将背景扩展到屏幕边缘

css - 使用 Webpack 和 React 加载 CSS

node.js - 获取 socket.io.js

javascript - 无论如何在javascript中实现XOR

javascript - jQuery 自动完成 @mention