From 53fdc9bdebe56576910c6f2ec12228318d736b88 Mon Sep 17 00:00:00 2001 From: Nikita Lutsenko Date: Mon, 8 Feb 2016 22:51:58 -0800 Subject: [PATCH] Refactor FilesAdapter to ES6 style. --- src/FilesAdapter.js | 25 ++++++++------- src/GridStoreAdapter.js | 69 +++++++++++++++++++---------------------- src/files.js | 12 +++---- src/index.js | 8 +++-- 4 files changed, 57 insertions(+), 57 deletions(-) diff --git a/src/FilesAdapter.js b/src/FilesAdapter.js index 427e20d9bb..94fd2bb879 100644 --- a/src/FilesAdapter.js +++ b/src/FilesAdapter.js @@ -3,27 +3,28 @@ // Allows you to change the file storage mechanism. // // Adapter classes must implement the following functions: -// * create(config, filename, data) -// * get(config, filename) -// * location(config, req, filename) +// * createFileAsync(config, filename, data) +// * getFileDataAsync(config, filename) +// * getFileLocation(config, request, filename) // // Default is GridStoreAdapter, which requires mongo // and for the API server to be using the ExportAdapter // database adapter. -var GridStoreAdapter = require('./GridStoreAdapter'); +let adapter = null; -var adapter = GridStoreAdapter; - -function setAdapter(filesAdapter) { +export function setAdapter(filesAdapter) { adapter = filesAdapter; } -function getAdapter() { +export function getAdapter() { return adapter; } -module.exports = { - getAdapter: getAdapter, - setAdapter: setAdapter -}; +export class FilesAdapter { + createFileAsync(config, filename, data) { } + + getFileDataAsync(config, filename) { } + + getFileLocation(config, request, filename) { } +} diff --git a/src/GridStoreAdapter.js b/src/GridStoreAdapter.js index 0d1e896578..161515c66c 100644 --- a/src/GridStoreAdapter.js +++ b/src/GridStoreAdapter.js @@ -3,46 +3,41 @@ // Stores files in Mongo using GridStore // Requires the database adapter to be based on mongoclient -var GridStore = require('mongodb').GridStore; -var path = require('path'); +import { GridStore } from 'mongodb'; -// For a given config object, filename, and data, store a file -// Returns a promise -function create(config, filename, data) { - return config.database.connect().then(() => { - var gridStore = new GridStore(config.database.db, filename, 'w'); - return gridStore.open(); - }).then((gridStore) => { - return gridStore.write(data); - }).then((gridStore) => { - return gridStore.close(); - }); -} +import * as Path from 'path'; +import { FilesAdapter } from './FilesAdapter'; -// Search for and return a file if found by filename -// Resolves a promise that succeeds with the buffer result -// from GridStore -function get(config, filename) { - return config.database.connect().then(() => { - return GridStore.exist(config.database.db, filename); - }).then(() => { - var gridStore = new GridStore(config.database.db, filename, 'r'); - return gridStore.open(); - }).then((gridStore) => { - return gridStore.read(); - }); -} +class GridStoreAdapter extends FilesAdapter { + // For a given config object, filename, and data, store a file + // Returns a promise + createFileAsync(config, filename, data) { + return config.database.connect().then(() => { + let gridStore = new GridStore(config.database.db, filename, 'w'); + return gridStore.open(); + }).then((gridStore) => { + return gridStore.write(data); + }).then((gridStore) => { + return gridStore.close(); + }); + } + + getFileDataAsync(config, filename) { + return config.database.connect().then(() => { + return GridStore.exist(config.database.db, filename); + }).then(() => { + let gridStore = new GridStore(config.database.db, filename, 'r'); + return gridStore.open(); + }).then((gridStore) => { + return gridStore.read(); + }); + } -// Generates and returns the location of a file stored in GridStore for the -// given request and filename -function location(config, req, filename) { - return (req.protocol + '://' + req.get('host') + - path.dirname(req.originalUrl) + '/' + req.config.applicationId + + getFileLocation(config, request, filename) { + return (request.protocol + '://' + request.get('host') + + Path.dirname(request.originalUrl) + '/' + config.applicationId + '/' + encodeURIComponent(filename)); + } } -module.exports = { - create: create, - get: get, - location: location -}; +export default GridStoreAdapter; diff --git a/src/files.js b/src/files.js index a840e098de..86cdbfbe13 100644 --- a/src/files.js +++ b/src/files.js @@ -3,12 +3,13 @@ var bodyParser = require('body-parser'), Config = require('./Config'), express = require('express'), - FilesAdapter = require('./FilesAdapter'), middlewares = require('./middlewares.js'), mime = require('mime'), Parse = require('parse/node').Parse, rack = require('hat').rack(); +import { getAdapter as getFilesAdapter } from './FilesAdapter'; + var router = express.Router(); var processCreate = function(req, res, next) { @@ -40,13 +41,13 @@ var processCreate = function(req, res, next) { } var filename = rack() + '_' + req.params.filename + extension; - FilesAdapter.getAdapter().create(req.config, filename, req.body) - .then(() => { + getFilesAdapter().createFileAsync(req.config, filename, req.body).then(() => { res.status(201); - var location = FilesAdapter.getAdapter().location(req.config, req, filename); + var location = getFilesAdapter().getFileLocation(req.config, req, filename); res.set('Location', location); res.json({ url: location, name: filename }); }).catch((error) => { + console.log(error); next(new Parse.Error(Parse.Error.FILE_SAVE_ERROR, 'Could not store file.')); }); @@ -54,8 +55,7 @@ var processCreate = function(req, res, next) { var processGet = function(req, res) { var config = new Config(req.params.appId); - FilesAdapter.getAdapter().get(config, req.params.filename) - .then((data) => { + getFilesAdapter().getFileDataAsync(config, req.params.filename).then((data) => { res.status(200); var contentType = mime.lookup(req.params.filename); res.set('Content-type', contentType); diff --git a/src/index.js b/src/index.js index 37a88b893a..48d3e8c9d7 100644 --- a/src/index.js +++ b/src/index.js @@ -5,7 +5,6 @@ var batch = require('./batch'), cache = require('./cache'), DatabaseAdapter = require('./DatabaseAdapter'), express = require('express'), - FilesAdapter = require('./FilesAdapter'), S3Adapter = require('./S3Adapter'), middlewares = require('./middlewares'), multer = require('multer'), @@ -13,6 +12,9 @@ var batch = require('./batch'), PromiseRouter = require('./PromiseRouter'), httpRequest = require('./httpRequest'); +import { setAdapter as setFilesAdapter } from './FilesAdapter'; +import { default as GridStoreAdapter } from './GridStoreAdapter'; + // Mutate the Parse object to add the Cloud Code handlers addParseCloud(); @@ -47,7 +49,9 @@ function ParseServer(args) { DatabaseAdapter.setAdapter(args.databaseAdapter); } if (args.filesAdapter) { - FilesAdapter.setAdapter(args.filesAdapter); + setFilesAdapter(args.filesAdapter); + } else { + setFilesAdapter(new GridStoreAdapter()); } if (args.databaseURI) { DatabaseAdapter.setAppDatabaseURI(args.appId, args.databaseURI);