2017-05-19 8 views
0

MongooseとExpressを使用してRESTful APIを作成するNode.jsアプリケーションを作成しています。 Mongooseスキーマは必須フィールドを定義します。しかし、Postman経由で空のPOSTを送信すると、APIによって空のレコードが作成されます。 Mongoose/MongoDBが私のスキーマに基づいて保存を妨げないのはなぜですか?スキーマが「必要」であるにもかかわらず空のレコードを保存するMongoose

私は(つまり、データベースの制約のような)

を間違った方法をNode.jsの/速達/マングース/ MongoDBのを学習し、私は、スキーマの必須項目を考えることもできるので、MySQLの/ MSSQLの世界から来ていますここに私のルータは、次のとおりです。ここで

// Initialize controller(s) for CRUD 
var customer = require('../controllers/customercontroller'); 

// Initialize Router 
var express = require('express'); 
var router = express.Router(); 

router.get('/:id', function (req, res) { 
    console.log("Customer Requested"); 

    customer.read(req, res); 
}); 

router.get('/', function (req, res) { 
    console.log("Customer List Requested"); 
    customer.getList(req, res); 
}); 

router.put("/:id", function (req, res) { 
    console.log("Updating Customer"); 
    customer.update(req, res); 

}); 

router.post("/", function (req, res) { 
    console.log("Creating Customer"); 
    customer.create(req, res); 

}); 

router.delete("/:id", function (req, res) { 
    console.log("Delete Customer"); 
    customer.delete(req, res); 
}); 

module.exports = router; 

は私のコントローラです:

var Customer = require('../models/customermodel'); 

exports.getList = function (req, res) { 
    Customer.find({}, function (err, customer) { 
     if (err) 
      res.send(err); 
     res.json(customer); 
    }); 
}; 

exports.create = function (req, res) { 
    var customer = new Customer(req.body); 
    customer.save(function (err, customer) { 
     if (err) 
      res.send(err); 
     res.json(customer); 
    }); 
}; 

exports.read = function (req, res) { 
    Customer.find(req.params.id, function (err, customer) { 
     if (err) 
      res.send(err); 
     res.json(customer); 
    }); 
}; 

exports.update = function (req, res) { 
    Customer.findOneAndUpdate(req.params.id, function (err, customer) { 
     if (err) 
      res.send(err); 
     res.json(customer); 
    }); 
}; 

exports.delete = function (req, res) { 
    Customer.remove({_id: req.params.id}, function (err, customer) { 
     if (err) 
      res.send(err); 
     res.json({ message: 'Customer deleted'}); 
    }); 
}; 

そして、ここで私のモデルである:

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost/hs_db'); 

var Schema = mongoose.Schema; 

var CustomerSchema = new Schema({ 
    "name": { type: String, Required: 'Required: name' }, 
    "alias": { type: String, Required: 'Required: alias' }, 
    "email": { type: String, Required: 'Required: email' }, 
    "address1": { type: String, Required: 'Required: address1' }, 
    "address2": { type: String, Required: 'Required: address2' }, 
    "address3": { type: String, Required: 'Required: address3' }, 
    "city": { type: String, Required: 'Required: city' }, 
    "state": { type: String, Required: 'Required: state' }, 
    "postcode": { type: String, Required: 'Required: postcode' }, 
    "country": { type: String, Required: 'Required: country' }, 
    "created": { type: Date, Required: 'Required: date' }, 
}); 

module.exports = mongoose.model('customer', CustomerSchema); 

私はポストマンと空の体を投稿しMongoのコンソールで結果を照会:

> db.customers.find() 
{ "_id" : ObjectId("591f25ae0cca8f5148cce551"), "__v" : 0 } 
{ "_id" : ObjectId("591f25d40cca8f5148cce552"), "__v" : 0 } 
{ "_id" : ObjectId("591f25f00cca8f5148cce553"), "__v" : 0 } 
{ "_id" : ObjectId("591f2764dc5a191fe8730ccd"), "__v" : 0 } 
> 

SO、私の質問:

mySQLまたはMSSQLのデータベース制約と同様に、スキーマがデータを検証して保存しないようにしていませんか?あるいは、スキーマはnode.jsコントローラのデータを参照するだけで、制約を適用するビジネスロジックを作成する必要がありますか?

+0

Arghhを... ..それがあった!愚かなプログラマーのエラー:)目の新鮮なセットのおかげで! – hoekma

答えて

2

スキーマプロパティ名は大文字と小文字が区別されますので、requiredにごRequiredフィールドを変更します。

var CustomerSchema = new Schema({ 
    "name": { type: String, required: 'Required: name' }, 
    "alias": { type: String, required: 'Required: alias' }, 
    ... 
0

簡単な方法では、以下のように必要なフィールドを定義することができます。

var CustomerSchema = new Schema({ 
    "name": { type: String, required: true }, 
    "alias": { type: String, required: true }, 
    ... 
関連する問題