如何在Express和Node中处理服务器端验证?

时间:2015-01-26 22:30:13

标签: node.js validation mongoose

我有一个网络应用程序,可以在POST请求中发送我的Express服务器MongoDB ObjectID。然后我使用这些ObjectID来使用Mongoose从我的数据库中选择文档。

我目前正在处理错误,方法是从Mongoose的回调中获取错误,从路由处理函数返回,然后调用一个响应状态和错误的泛型错误函数。

if (app.get('env') === 'development') {
    app.use(function(err, req, res, next) {
        console.log(err);
        res.status(err.status || 500);
        res.send({
            message: err.message,
            error: err
        });
    });
}

我很好奇是否使用像Validate.js这样的东西来检查ObjectID是否有效,然后再将它提供给Mongoose,或者只是让Mongoose看到它无效并允许它回调一个错误然后我处理我的通用错误处理程序?

我很想听到任何一种解释。

1 个答案:

答案 0 :(得分:1)

来自http://mongoosejs.com/docs/validation.html

  

Mongoose有几个内置的验证器。

array(9) {
  ["version_number"]=>
  int(463623)
  ["age"]=>
  int(3)
  ["features"]=>
  int(1597)
  ["ssl_version_number"]=>
  int(0)
  ["version"]=>
  string(6) "7.19.7"
  ["host"]=>
  string(23) "x86_64-redhat-linux-gnu"
  ["ssl_version"]=>
  string(22) "NSS/3.16.2.3 Basic ECC"
  ["libz_version"]=>
  string(5) "1.2.3"
  ["protocols"]=>
  array(12) {
    [0]=>
    string(4) "tftp"
    [1]=>
    string(3) "ftp"
    [2]=>
    string(6) "telnet"
    [3]=>
    string(4) "dict"
    [4]=>
    string(4) "ldap"
    [5]=>
    string(5) "ldaps"
    [6]=>
    string(4) "http"
    [7]=>
    string(4) "file"
    [8]=>
    string(5) "https"
    [9]=>
    string(4) "ftps"
    [10]=>
    string(3) "scp"
    [11]=>
    string(4) "sftp"
  }
}

例如,

All SchemaTypes have the built in required validator.
Numbers have min and max validators.
Strings have enum and match validators.

我想你应该使用他们的方法,因为这是它的目的。