簡體   English   中英

如果Node.JS發布請求中缺少json數據,則正常失敗

[英]Failing gracefully if any json data is missing in Node.JS post request

我試圖在node.js服務器上設置一個發布請求,這樣,如果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個字段時。

您可以為您的請求創建一個JSON模式,然后使用ajv等npm包使用現有的JSON模式驗證您的實際請求

您可以從此處查看有關JSON模式的更多信息。 您可以從此處創建自己的JSON模式。

節點JS中有一個稱為JOI的模塊,它會進行初始有效負載驗證。

並與Express 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM