如果Node.JS发布请求

时间:2018-02-12 19:05:09

标签: javascript json node.js

我正在尝试在node.js服务器上设置post请求,这样如果缺少json报告中的任何数据,它只会抛出错误而不是对数据库做任何事情。

我的服务器是使用express和body-parser的mongodb服务器。 这是我想要创建的代码

app.post('/update', function(req, res) {
  const params = req.body;

  const newData = {
    id: params.id,
    data: params.data
    .../a ton more data
  };

  if (anything is missing from newData (any field is undefined) ) {
   res.send({err: true});
  } else {
   //Some cool database things
  }

}

我意识到我可以检查我的任何字段是否未定义但是这不是很优雅,特别是当我要在传入数据中有大约20个字段时。

2 个答案:

答案 0 :(得分:0)

您可以为您的请求创建JSON架构,然后使用npm包(如ajv

)使用现有的JSON架构验证您的实际请求

您可以从here查看有关JSON架构的更多信息。您可以从here创建自己的JSON模式。

答案 1 :(得分:0)

节点JS中有一个名为JOI的模块,用于执行初始有效负载验证。

使用快速JS检查express-joi Express Joi Link

var express = require('express');
var expressJoi = require('express-joi');

var Joi = expressJoi.Joi; // The exposed Joi object used to create schemas and custom types 

var app = express();
app.use(express.methodOverride());
app.use(express.bodyParser());
app.use(app.router);
app.use(errorHandler);

// Use the Joi object to create a few schemas for your routes.  
var getUsersSchema = {
  limit: expressJoi.Joi.types.Number().integer().min(1).max(25),
  offset: expressJoi.Joi.types.Number().integer().min(0).max(25),
  name: expressJoi.Joi.types.String().alphanum().min(2).max(25)
};

var updateUserSchema = {
  userId: Joi.types.String().alphanum().min(10).max(20),
  name: Joi.types.String().min(3).max(50)
};
// Attach the validator to the route definitions 
app.get('/users', expressJoi.joiValidate(getUsersSchema), handleUsers);
app.put('/users/:userId', expressJoi.joiValidate(updateUserSchema), 
 handleUpdateUser);

app.listen(8080);