Skip to content

Instantly share code, notes, and snippets.

View Fabianopb's full-sized avatar

Fabiano Brito Fabianopb

View GitHub Profile
@Fabianopb
Fabianopb / server.ts
Last active February 12, 2023 17:37
Node server using multer to upload files to AWS S3 in TypeScript.
const express = require('express');
const AWS = require('aws-sdk');
const fs = require('fs');
const fileType = require('file-type');
const multiparty = require('multiparty');
// NOTE: if you're transpiling, using TS or don't use commonjs for any other reason, you can import instead of require:
// import express from 'express';
// import AWS, { S3 } from 'aws-sdk';
// import fs from 'fs';
@Fabianopb
Fabianopb / Procfile
Created September 20, 2018 18:21
Procfile example for express-react-ts-ci story in Medium
web: yarn serve
@Fabianopb
Fabianopb / .travis.yml
Last active June 2, 2019 07:56
Example of Travis config for express-react-ts-ci
language: node_js
node_js:
- 10
- 8
services:
- mongodb
env:
- AUTH_SHARED_SECRET=auth-shared-secret
script:
- yarn lint
@Fabianopb
Fabianopb / private-method-App.tsx
Created September 17, 2018 17:56
private method in the App.tsx for express-react-ts-ci Medium story
private getTestData = async (): Promise<void> => {
try {
this.setState({ error: "" });
const response = await axios.get<Item[]>("/api/items", { headers: session.getAuthHeaders() });
this.setState({ data: response.data });
} catch (error) {
this.setState({ error: "Something went wrong" });
} finally {
this.setState({ isRequesting: false });
}
@Fabianopb
Fabianopb / session.ts
Created September 17, 2018 17:51
Session management for express-react-ts-ci Medium story
// Set the session in the local storage
export const setSession = (token: string, expiry: string): void => {
localStorage.setItem('token', token);
localStorage.setItem('expiry', expiry);
};
// Clear the session from the local storage
export const clearSession = (): void => {
localStorage.removeItem('token');
localStorage.removeItem('expiry');
@Fabianopb
Fabianopb / items.test.ts
Created September 16, 2018 12:50
Testing backend for express-react-ts-ci Medium post
import MongodbMemoryServer from "mongodb-memory-server";
import * as mongoose from "mongoose";
import * as request from "supertest";
import app from "../app";
import User from "../users/user.model";
import Item from "./item.model";
describe("/api/items tests", () => {
const mongod = new MongodbMemoryServer();
@Fabianopb
Fabianopb / config.ts
Last active September 16, 2018 12:42
Authentication for express-react-ts-ci Medium post
import * as jwt from "express-jwt";
// A-ha! So this is where the AUTH_SHARED_SECRET from .env is used!
export const authorize = jwt({
secret: process.env.AUTH_SHARED_SECRET
});
@Fabianopb
Fabianopb / items.controller.ts
Created September 16, 2018 12:15
Items controller for express-react-ts-ci Medium post
import * as bodyParser from "body-parser";
import * as express from "express";
import { authorize } from "../config";
import Item from "./item.model";
const router = express.Router();
router.route("/").get(authorize, async (request, response) => {
const items = await Item.find();
return response.status(200).json(items);
@Fabianopb
Fabianopb / item.model.ts
Created September 16, 2018 12:09
Item model for express-react-ts-ci Medium post
import * as mongoose from "mongoose";
// Declare model interface
interface Item extends mongoose.Document {
name: string;
value: number;
}
// Define model schema
const itemSchema = new mongoose.Schema({
@Fabianopb
Fabianopb / app.ts
Created September 16, 2018 12:00
app.ts for express-react-ts-ci Medium post
import * as dotenv from "dotenv";
import * as express from "express";
import * as path from "path";
// Put dotenv in use before importing controllers
dotenv.config();
// Import controllers
import itemsController from "./items/items.controller";
import usersController from "./users/users.controller";