2016-06-30 2 views
0

Я изучаю узел, и я использую Postman для выполнения этих запросов с параметрами в теле.node.js - Плохой заказ в запросе POST с использованием Postman

Для маршрутизатора: router.post ('/ locations', ctrlLocations.locationsCreate); здесь контроллер:

module.exports.locationsCreate = function (req, res) { 
    Loc.create({ 
     name: req.body.name, 
     address: req.body.address, 
     facilities: req.body.facilities.split(","), 
     coords: [parseFloat(req.body.lng), parseFloat(req.body.lat)], 
     openingTimes: [{ 
      days: req.body.days1, 
      opening: req.body.opening1, 
      closing: req.body.closing1, 
      closed: req.body.closed1, 
     },{ 
      days: req.body.days2, 
      opening: req.body.opening2, 
      closing: req.body.closing2, 
      closed: req.body.closed2, 
     }] 
    }, 
    function(err, location){ 
     if(err){ 
      sendJSONresponse(res, 400, err); 
     } else{ 
      sendJSONresponse(res, 201, location); 
     } 
    }); 
}; 

Здесь вы можете увидеть мою модель DB для «мест»:

var mongoose = require('mongoose'); 

var openingTimeSchema = new mongoose.Schema({ 
    days: {type: String, required: true}, 
    opening: String, 
    closing: String, 
    closed: {type: Boolean, required: true} 
}); 

var reviewSchema = new mongoose.Schema({ 
    author: {type: String, required: true}, 
    rating: {type: Number, required: true, min: 0, max: 5}, 
    reviewText: {type: String, required: true}, 
    createdOn: {type: Date, "default": Date.now} 
}); 

var locationSchema = new mongoose.Schema({ 
    name: {type: String}, 
    address: String, 
    rating: {type: Number, "default":0, min: 0, max: 5}, 
    facilities: [String], 
    coords: {type: [Number], index:'2ndsphere'}, 
    openingTimes: [openingTimeSchema], 
    reviews: [reviewSchema] 
}); 

mongoose.model('Location', locationSchema); 

у меня нет никакой проблемы, чтобы создать новое «местоположение» с помощью MongoDB консоли , но я сталкиваюсь с проблемами при использовании Postman: отправленный ответ изменяет порядок некоторых «полей» и добавляет нежелательные идентификаторы к «временам открытия».

Здесь х-WWW-форм-urlencoded запрос как массовое редактирование:

name:Paquito's Bar 
address:41 Lower Brook St, Reading RG1 2AQ, UK 
rating:4.5 
facilities:WiFi, Coffe, Sexy Staff 
lng:-0.9722977 
lat:51.4494778 
days1:Monday -Friday 
opening1:8:00am 
closing1:5:00pm 
closed1:false 
days2:Saturday - Sunday 
opening2:10:00am 
closing2:12:00pm 
closed2:false 

И вот результат:

{ 
    "__v": 0, 
    "name": "Paquito's Bar", 
    "address": "41 Lower Brook St, Reading RG1 2AQ, UK", 
    "_id": "5774ecf8bcdead7c368a7648", 
    "reviews": [], 
    "openingTimes": [ 
    { 
     "days": "Monday -Friday", 
     "opening": "8:00am", 
     "closing": "5:00pm", 
     "closed": false, 
     "_id": "5774ecf8bcdead7c368a764a" 
    }, 
    { 
     "days": "Saturday - Sunday", 
     "opening": "10:00am", 
     "closing": "12:00pm", 
     "closed": false, 
     "_id": "5774ecf8bcdead7c368a7649" 
    } 
    ], 
    "coords": [ 
    -0.9722977, 
    51.4494778 
    ], 
    "facilities": [ 
    "WiFi", 
    " Coffe", 
    " Sexy Staff" 
    ], 
    "rating": 0 
} 

Я создаю здесь документы для API, а также вы можете видеть, что упорядочение плохое, и я не хочу, чтобы _id был в открытые времена: я скорее принудительно создаю идентификатор, когда это необходимо через код, чем автоматически создание.

Возможно, есть лучший способ использовать Почтальон ... Любая помощь будет полезна.

Заранее благодарен!

+0

Я не думаю, что ваша проблема с почтальоном - его мангуста/Монго, что добавление к _id. См. Http://stackoverflow.com/questions/9598505/mongoose-retrieving-data-without-id-field – MrWillihog

+0

Я не могу отказаться от мангуста, но я думаю, что по крайней мере mongo не является, так как этот запрос: 'code' // Сохранить запрос для нового Расположение db.locations.save ({ \t имя: 'Starcups', \t адрес: '125 High Street, Чтение, RG6 1PS', \t рейтинг: 3, \t оборудование: [ 'Горячие напитки ',' Food ',' Premium wifi '], \t coords: [-0.9690884, 51.455041], \t openingTimes: [{ \t \t дней: 'Понедельник - пятница', \t \t открытие: '7:00 утра', \t \t закрытия: '7:00 вечера', \t \t закрыт: ложные \t }, { \t \t дней: 'суббота', \t \t открытие: '8:00 утра', \t \t закрытия: '5:00 вечера', \t \t закрыт: Fals е \t}, { \t \t дней: 'воскресенье', \t \t закрыт: правда \t}] }) 'code' выполняется очень хорошо – AtomicNation

+0

Я прочитал этот пост вы упоминаете, и OK, вы можете исключаем, когда вы находите, но здесь нужно быть гармоничным с режимом db, где время открытия - это свойства местоположения, поэтому они должны быть частью документа, а не вложенными документами (если я получил это хорошо, mongoose создайте id для каждый документ, но не должен создавать, когда мы говорим о самом «объекте»). Танки, во всяком случае! – AtomicNation

ответ

0

Порядок «полей» НЕ ГАРАНТИРОВАН в javascript, и вы никогда не должны зависеть от него.

О «ids» - вы сказали, что в openingTimes есть массив другой схемы, поэтому он ведет себя с этим так.

Если openingTimes является вложенным документом, вы должны определить его в качестве вложенного документа, например, как этот

var locationSchema = new mongoose.Schema({ 
    name: {type: String}, 
    address: String, 
    rating: {type: Number, "default":0, min: 0, max: 5}, 
    facilities: [String], 
    coords: {type: [Number], index:'2ndsphere'}, 
    openingTimes: [{ 
     days: {type: String, required: true}, 
     opening: String, 
     closing: String, 
     closed: {type: Boolean, required: true} 
    }], 
    reviews: [reviewSchema] 
}); 
+0

Правильно, со временем открытия, но я думаю, что должно быть далеко: 1) Избегайте создания id и 2) сохраняйте документ в порядке, установленном в модели. – AtomicNation

+0

@AtomicNation - Schema - коллекция в MongoDB. Коллекция не может быть без _id в MongoDB. И ни MongoDB ни Javascript НЕ ГАРАНТИРУЮТ порядок полей. Никогда. Когда-либо. Поэтому вы тоже не должны этого делать, или вы были бы разочарованы :). Google it - «поля порядка mongodb» – libik

+0

Я вижу ... это просто странно для меня, но я думаю, что пока он работает, все счастливы! Спасибо всем за вашу помощь! – AtomicNation