Skip to content

Instantly share code, notes, and snippets.

View jgcmarins's full-sized avatar

João Marins jgcmarins

View GitHub Profile
@jgcmarins
jgcmarins / app.ts
Created June 13, 2020 21:55
Node.js Serverless AWS Lambda Function: How to cache MongoDB connection and reuse it between function calls?
import 'isomorphic-fetch';
import Koa from 'koa';
import bodyParser from 'koa-bodyparser';
import convert from 'koa-convert';
import cors from 'koa-cors';
import koaLogger from 'koa-logger';
import Router from '@koa/router';
const app = new Koa();
import { createServer, proxy } from 'aws-serverless-express';
import connectDatabase from './database';
import app from './app';
export const handler = (event, ctx) => {
// This will re-use `cachedMongoConn` between function calls.
// See https://www.mongodb.com/blog/post/serverless-development-with-nodejs-aws-lambda-mongodb-atlas
// See https://docs.atlas.mongodb.com/best-practices-connecting-to-aws-lambda/
import mongoose from 'mongoose';
import { MONGO_URI } from './config';
let cachedMongoConn = null;
export default function connectDatabase() {
return new Promise((resolve, reject) => {
mongoose.Promise = global.Promise;
mongoose.connection
/**
* Metro configuration for React Native
* https://github.com/facebook/react-native
*
* @format
*/
const path = require('path');
const { FileStore } = require('metro-cache');
@jgcmarins
jgcmarins / webpack.config.js
Created July 21, 2020 18:15
Run any Node.js script with webpack. Usage: babel-node webpackx.js ./path/to/script
const path = require('path');
const nodeExternals = require('webpack-node-externals');
const cwd = process.cwd();
export const outputPath = path.join(cwd, '.webpack');
export const outputFilename = 'bundle.js';
export default {
// inspired by https://stackoverflow.com/questions/105034/how-to-create-guid-uuid/2117523#2117523
// @TODO - improve this
export function uuidv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
const r = (Math.random() * 16) | 0,
v = c == 'x' ? r : (r & 0x3) | 0x8;
return v.toString(16);
});
}
@jgcmarins
jgcmarins / backup.js
Created July 26, 2020 16:28 — forked from 0uerd/backup.js
Auto backup function.
const fs = require('fs');
const _ = require('lodash');
const exec = require('child_process').exec;
const path = require('path');
// Concatenate root directory path with our backup folder.
const backupDirPath = path.join(__dirname, 'database-backup');
const dbOptions = {
user: '<databaseUsername>',
@jgcmarins
jgcmarins / filterAsync.ts
Created July 29, 2020 14:00 — forked from sibelius/filterAsync.ts
Simple filter async
function mapAsync<T, U>(array: T[], callbackfn: (value: T, index: number, array: T[]) => Promise<U>): Promise<U[]> {
return Promise.all(array.map(callbackfn));
}
async function filterAsync<T>(array: T[], callbackfn: (value: T, index: number, array: T[]) => Promise<boolean>): Promise<T[]> {
const filterMap = await mapAsync(array, callbackfn);
return array.filter((value, index) => filterMap[index]);
}
@jgcmarins
jgcmarins / store.mjs
Created October 1, 2020 17:16 — forked from kristoferjoseph/store.mjs
store
const listeners = []
const state = {}
let noop = x => x
function subscribe (fn) {
listeners.push(fn)
}
function unsubscribe (fn) {
listeners.splice(listeners.indexOf(fn), 1)