Post Data to MongoDB serverless using Netlify Functions and AWS Lambdas
Quick and easy example showing how to create a Netlify function that will post data to a MongoDB instance
This tutorial is going to be very similar to yesterdays, so you may see some repeat code/content. We’re going to jump right into the code. In order to get this working we’re going to install both the co and mongoose packages using your package manager of choice.
npm install mongoose
or yarn add mongoose
npm install co
or yarn add co
Code
var co = require('co');
var mongoose = require('mongoose');
let conn = null;
const uri = 'mongodb://username:password@mongourl:port/databaseName';
exports.handler = function(event, context, callback) {
const requestBody = JSON.parse(event.body);
context.callbackWaitsForEmptyEventLoop = false;
run(requestBody).
then(res => {
callback(null, res);
}).
catch(error => callback(error));
};
function run(requestBody) {
return co(function*() {
if (conn == null) {
conn = yield mongoose.createConnection(uri, {
bufferCommands: false,
bufferMaxEntries: 0
});
conn.model('collectionName', new mongoose.Schema({
schedule: String,
occupancy: Number,
count: Number,
price: Number,
time: String,
link: String
}));
}
const M = conn.model('Bookings');
const doc = yield M.findOneAndUpdate({"collectionName": requestBody.schedule}, {$set:{count: requestBody.count}});
console.log(doc)
const response = {
statusCode: 200,
body: JSON.stringify(doc)
};
return response;
});
}
If you want an in depth explanation of the code feel free to follow my example from yesterday where I explained how to get data from MongoDB with Netlify functions. The only difference in code is that your const doc
variable will be making a request to find a specific entry and update using the findOneAndUpdate
method. An example post request for your new lambda would be
axios.post('/.netlify/functions/postSchedule', update).then(res => {
this.setState({success: true});
})
As you can see, nothing changes in how you would code your friend end to make a post request! Tomorrow I will show an example for another function, this time we will be integrating our lambda with Stripe to make payments without a backend.