Reputation: 305
I'm using Insomnia to test requests to my API. Can someone explain why the request in the first image works, but the second image only posts the first object in the array?
For reference, here's the array of objects I'm trying to post:
[{
"period":5,
"uploadDate":"2015-11-19T21:00:00.000Z",
"transferCode":"23100","vendor":"Unity State",
"voucherNumber": "0000047538",
"description":"1003-1495 Condi Operating Oct ",
"amount":7083
},
{
"period":5,
"uploadDate":"2015-11-19T21:00:00.000Z",
"transferCode":"23100",
"vendor":"Northern Bahr-el State",
"voucherNumber":"0000047546",
"description":"1003-1494 Condi Operating Oct ",
"amount":7083
}]
As well as the code I'm using in Nodejs:
//transferController.js in Node
function createTransfer(request, response) {
console.log('posting');
console.log('body: ' + request.body); //TEST
console.info("Body: " + JSON.stringify(request.body)); //TEST
var transfer = new Transfer(request.body);
transfer.save(function(error) {
// console.log('transfer and transfer: ' + transfer);
if(error) return response.json({ message: 'could not create transfer because ' + error });
response.json({ transfer: transfer });
});
}
Upvotes: 1
Views: 19229
Reputation: 4398
Since you are posting an array of objects, you should iterate through them when saving to the db. Try this (using async.mapSeries):
var async = require("async");
function createTransfer(request, response) {
async.mapSeries(request.body, function (item, cb) {
var transfer = new Transfer(item);
transfer.save(function(error){
cb(error, transfer);
});
},
function (error, transfers){
response.json(error ? { message: "could not create because " + error } : transfers);
});
}
[EDIT]
Here's an example app using this code.
main.js
var express = require("express");
var bodyParser = require("body-parser");
var mongoose = require("mongoose");
var async = require("async");
var Transfer = require("./models/Transfer");
var app = express();
app.use(bodyParser.json());
mongoose.connect("mongodb://localhost/test");
//----------------------------------------------------
app.post('/', function (req, res) {
async.mapSeries(req.body, function iterator(item, cb) {
var transfer = new Transfer(item);
transfer.save(function(error){
cb(error, transfer);
});
},
function done(error, transfers){
res.json(error ? { message: "could not create transfer because " + error } : transfers);
});
});
app.listen(3000);
Transfer.js
var mongoose = require('mongoose');
var TransferSchema = new mongoose.Schema({
uploadDate : Date,
period : Number,
transferCode : String,
voucherNumber : String,
vendor : String,
description : String,
amount : Number
});
module.exports = mongoose.model('Transfer', TransferSchema);
Output (using insomnia)
[
{
"__v": 0,
"period": 5,
"uploadDate": "2015-11-19T21:00:00.000Z",
"transferCode": "23100",
"vendor": "Unity State",
"voucherNumber": "0000047538",
"description": "1003-1495 Condi Operating Oct ",
"amount": 7083,
"_id": "5697c87e0dbd4a7413000001"
},
{
"__v": 0,
"period": 5,
"uploadDate": "2015-11-19T21:00:00.000Z",
"transferCode": "23100",
"vendor": "Northern Bahr-el State",
"voucherNumber": "0000047546",
"description": "1003-1494 Condi Operating Oct ",
"amount": 7083,
"_id": "5697c87e0dbd4a7413000002"
}
]
Upvotes: 1