Skip to content

Commit 5ab58fc

Browse files
committed
Refactor FilesAdapter to ES6 style.
1 parent f2c33c0 commit 5ab58fc

File tree

4 files changed

+55
-57
lines changed

4 files changed

+55
-57
lines changed

src/FilesAdapter.js

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,28 @@
33
// Allows you to change the file storage mechanism.
44
//
55
// Adapter classes must implement the following functions:
6-
// * create(config, filename, data)
7-
// * get(config, filename)
8-
// * location(config, req, filename)
6+
// * createFileAsync(config, filename, data)
7+
// * getFileDataAsync(config, filename)
8+
// * getFileLocation(config, request, filename)
99
//
1010
// Default is GridStoreAdapter, which requires mongo
1111
// and for the API server to be using the ExportAdapter
1212
// database adapter.
1313

14-
var GridStoreAdapter = require('./GridStoreAdapter');
14+
var adapter = null;
1515

16-
var adapter = GridStoreAdapter;
17-
18-
function setAdapter(filesAdapter) {
16+
export function setAdapter(filesAdapter) {
1917
adapter = filesAdapter;
2018
}
2119

22-
function getAdapter() {
20+
export function getAdapter() {
2321
return adapter;
2422
}
2523

26-
module.exports = {
27-
getAdapter: getAdapter,
28-
setAdapter: setAdapter
29-
};
24+
export class FilesAdapter {
25+
createFileAsync(config, filename, data) { }
26+
27+
getFileDataAsync(config, filename) { }
28+
29+
getFileLocation(config, request, filename) { }
30+
}

src/GridStoreAdapter.js

Lines changed: 30 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,45 +4,38 @@
44
// Requires the database adapter to be based on mongoclient
55

66
var GridStore = require('mongodb').GridStore;
7-
var path = require('path');
87

9-
// For a given config object, filename, and data, store a file
10-
// Returns a promise
11-
function create(config, filename, data) {
12-
return config.database.connect().then(() => {
13-
var gridStore = new GridStore(config.database.db, filename, 'w');
14-
return gridStore.open();
15-
}).then((gridStore) => {
16-
return gridStore.write(data);
17-
}).then((gridStore) => {
18-
return gridStore.close();
19-
});
20-
}
8+
import * as Path from 'path';
9+
import { FilesAdapter } from './FilesAdapter';
2110

22-
// Search for and return a file if found by filename
23-
// Resolves a promise that succeeds with the buffer result
24-
// from GridStore
25-
function get(config, filename) {
26-
return config.database.connect().then(() => {
27-
return GridStore.exist(config.database.db, filename);
28-
}).then(() => {
29-
var gridStore = new GridStore(config.database.db, filename, 'r');
30-
return gridStore.open();
31-
}).then((gridStore) => {
32-
return gridStore.read();
33-
});
34-
}
11+
export class GridStoreAdapter extends FilesAdapter {
12+
// For a given config object, filename, and data, store a file
13+
// Returns a promise
14+
createFileAsync(config, filename, data) {
15+
return config.database.connect().then(() => {
16+
var gridStore = new GridStore(config.database.db, filename, 'w');
17+
return gridStore.open();
18+
}).then((gridStore) => {
19+
return gridStore.write(data);
20+
}).then((gridStore) => {
21+
return gridStore.close();
22+
});
23+
}
3524

36-
// Generates and returns the location of a file stored in GridStore for the
37-
// given request and filename
38-
function location(config, req, filename) {
39-
return (req.protocol + '://' + req.get('host') +
40-
path.dirname(req.originalUrl) + '/' + req.config.applicationId +
25+
getFileDataAsync(config, filename) {
26+
return config.database.connect().then(() => {
27+
return GridStore.exist(config.database.db, filename);
28+
}).then(() => {
29+
var gridStore = new GridStore(config.database.db, filename, 'r');
30+
return gridStore.open();
31+
}).then((gridStore) => {
32+
return gridStore.read();
33+
});
34+
}
35+
36+
getFileLocation(config, request, filename) {
37+
return (request.protocol + '://' + request.get('host') +
38+
Path.dirname(request.originalUrl) + '/' + config.applicationId +
4139
'/' + encodeURIComponent(filename));
40+
}
4241
}
43-
44-
module.exports = {
45-
create: create,
46-
get: get,
47-
location: location
48-
};

src/files.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
var bodyParser = require('body-parser'),
44
Config = require('./Config'),
55
express = require('express'),
6-
FilesAdapter = require('./FilesAdapter'),
76
middlewares = require('./middlewares.js'),
87
mime = require('mime'),
98
Parse = require('parse/node').Parse,
109
rack = require('hat').rack();
1110

11+
import { getAdapter as getFilesAdapter } from './FilesAdapter';
12+
1213
var router = express.Router();
1314

1415
var processCreate = function(req, res, next) {
@@ -40,22 +41,21 @@ var processCreate = function(req, res, next) {
4041
}
4142

4243
var filename = rack() + '_' + req.params.filename + extension;
43-
FilesAdapter.getAdapter().create(req.config, filename, req.body)
44-
.then(() => {
44+
getFilesAdapter().createFileAsync(req.config, filename, req.body).then(() => {
4545
res.status(201);
46-
var location = FilesAdapter.getAdapter().location(req.config, req, filename);
46+
var location = getFilesAdapter().getFileLocation(req.config, req, filename);
4747
res.set('Location', location);
4848
res.json({ url: location, name: filename });
4949
}).catch((error) => {
50+
console.log(error);
5051
next(new Parse.Error(Parse.Error.FILE_SAVE_ERROR,
5152
'Could not store file.'));
5253
});
5354
};
5455

5556
var processGet = function(req, res) {
5657
var config = new Config(req.params.appId);
57-
FilesAdapter.getAdapter().get(config, req.params.filename)
58-
.then((data) => {
58+
getFilesAdapter().getFileDataAsync(config, req.params.filename).then((data) => {
5959
res.status(200);
6060
var contentType = mime.lookup(req.params.filename);
6161
res.set('Content-type', contentType);

src/index.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,16 @@ var batch = require('./batch'),
55
cache = require('./cache'),
66
DatabaseAdapter = require('./DatabaseAdapter'),
77
express = require('express'),
8-
FilesAdapter = require('./FilesAdapter'),
98
S3Adapter = require('./S3Adapter'),
109
middlewares = require('./middlewares'),
1110
multer = require('multer'),
1211
Parse = require('parse/node').Parse,
1312
PromiseRouter = require('./PromiseRouter'),
1413
httpRequest = require('./httpRequest');
1514

15+
import { setAdapter as setFilesAdapter } from './FilesAdapter';
16+
import { GridStoreAdapter } from './GridStoreAdapter';
17+
1618
// Mutate the Parse object to add the Cloud Code handlers
1719
addParseCloud();
1820

@@ -47,7 +49,9 @@ function ParseServer(args) {
4749
DatabaseAdapter.setAdapter(args.databaseAdapter);
4850
}
4951
if (args.filesAdapter) {
50-
FilesAdapter.setAdapter(args.filesAdapter);
52+
setFilesAdapter(args.filesAdapter);
53+
} else {
54+
setFilesAdapter(new GridStoreAdapter());
5155
}
5256
if (args.databaseURI) {
5357
DatabaseAdapter.setAppDatabaseURI(args.appId, args.databaseURI);

0 commit comments

Comments
 (0)