2016-02-18 3 views
1

Я изучал этот вопрос до конца, но не могу найти простой ответ, который я ищу. В принципе, я хотел бы пакет POST JSON объектов в массиве.Опубликовать несколько объектов JSON одновременно с Express и Postman

У меня есть гигантский массив объектов JSON.

[ 
{ 
    "Name": "SEARCH Resource Center", 
    "Address": "2505 Fannin St, Houston, TX 77002", 
    "Phone": "(713) 739-7752", 
    "Hours": "Mon-Fri, 8am to 3pm", 
    "Category": "Drop-In Centers" 
}, 
{ 
    "Name": "Salvation Army Social Services - Young Adult Resource Center", 
    "Address": "2208 Main St, Houston, TX 77002", 
    "Phone": "(713) 658-9205", 
    "Hours": "Mon-Thurs, 11am to 3pm", 
    "Category": "Drop-In Centers" 
}, 
... 
] 

Я использую экспресс-сервер, который обрабатывает почтовые запросы выглядит следующим образом:

app.post('/api/orgs', function(req, res) { 

    // Creates a new User based on the Mongoose schema and the post body 
    var newOrg = new Organization(req.body); 

    // New User is saved in the db. 
    newOrg.save(function(err){ 
    if(err) 
     res.send(err); 

    // If no errors are found, it responds with a JSON of the new user 
    res.json(req.body); 
    }); 
}); 

Эти объекты будут сохранены в MongoDB в виде отдельных записей.

Я использую POSTMAN для отправки HTTP-сообщений POST на мой Экспресс-сервер. На данный момент я отправлял все мои JSON POSTS по одному, потому что я не могу найти лучший способ для пакетной публикации всех под-объектов, хранящихся в массиве, как отдельные объекты.

Любые предложения или рекомендации?

+1

Массив 'JSON' тоже, просто отправьте все это или разделите массив на разумные длины, если найдете его слишком медленным. – Adam

+0

@Adam, правильно, но я использую MongoDB на сервере. И я хочу рассматривать каждый объект JSON как свою собственную запись. Если я отправлю все это как один объект массива - я вроде как столкнулся с проблемой, когда у меня есть несколько объектов массива вместо нескольких объектов организации. Надеюсь, что это имеет смысл? –

+1

Затем сверните по массиву на сервере. В чем проблема? – Adam

ответ

2

Если вы посылаете массив в качестве ключа в вашем теле запроса, что-то вроде этого

enter image description here

Вы получите его как req.body.my_restaurants. Тогда просто используйте:

db.collection('restaurants').insertMany(req.body.my_restaurants, function(err, restaurants){ 
    if(err) console.log(err); 
    else console.log("restaurants Added Successfully"); 
}); 

Я предполагаю, что ресторанов это название вашей коллекции.

+0

Получение YourSchema.insert не является функцией. Я использую Mongoose btw. Возможно, это проблема. –

+0

Возможно, вы не используете Mongoose. используйте это 'db.collection ('name_of_your_collection'). insert (req.body.my_restaurants, function (err, restaurants) { if (err) console.log (err); else console.log (" restaurants Added Успешно "); });' –

+0

Эй! Я получил решение @siddharth. Мне просто нужно было изменить 'insert' на' insertMany', и он сработал. См.: Http://mongoosejs.com/docs/api.html#model_Model.insertMany Измените свой ответ, и я помету ваш как правильный. –

0

Я играл с предыдущим решением, которое я обозначил как правильно. Еще лучший подход, чем использование функции .insertMany(), заключается в использовании функции .create().

Функция .insertMany() пропускает промежуточное программное обеспечение, связанное с .save(), тогда как функция create() использует тот же процесс, но также может обрабатывать массивы.

Так что мой модифицированный экспресс-маршрут выглядел ниже (где Organization это имя моей схемы):

app.post('/api/orgs', function(req, res) { 

// Array of JSON Objects 
if (req.body.batch){ 
    Organization.create(req.body.batch, function(err){ 
    if(err) 
     res.send(err); 

    else 
     res.json(req.body); 
    }); 
} 
// Single JSON Object 
else { 
    var newOrg = new Organization(req.body); 

    // New User is saved in the db. 
    newOrg.save(function(err){ 
    if(err) 
     res.send(err); 

    // If no errors are found, it responds with a JSON of the new user 
    else 
     res.json(req.body); 
    }); 
} 
}); 

И я посылаю объекты JSON, которые выглядят как:

JSON in POSTMAN

Надеюсь, что это поможет кому-то еще по линии.

Смежные вопросы