mirror of
https://github.com/typicode/json-server.git
synced 2025-07-28 04:32:24 +08:00
94 lines
2.3 KiB
JavaScript
94 lines
2.3 KiB
JavaScript
var express = require('express'),
|
|
cors = require('cors'),
|
|
http = require('http'),
|
|
path = require('path'),
|
|
fs = require('fs'),
|
|
_ = require('underscore'),
|
|
logger = require('./utils/logger');
|
|
|
|
|
|
var defaultOptions = {
|
|
port: process.env.PORT || 3000,
|
|
readOnly: false
|
|
}
|
|
|
|
function createApp(db, options) {
|
|
// Create app
|
|
var app = express(),
|
|
options = options || {},
|
|
routes;
|
|
|
|
// Configure all environments
|
|
app.use(express.favicon());
|
|
app.use(express.logger('dev'));
|
|
app.use(express.json());
|
|
app.use(express.urlencoded());
|
|
app.use(express.methodOverride());
|
|
|
|
|
|
// Configure development
|
|
if ('development' == app.get('env')) {
|
|
app.use(express.errorHandler());
|
|
}
|
|
|
|
// Configure using options provided
|
|
app.set('port', options.port);
|
|
routes = options.readOnly ? './routes/read-only' : './routes/read-write';
|
|
routes = require(routes);
|
|
|
|
// Use default or user public directory
|
|
// Note: should be done before CORS and app.router setting
|
|
if (fs.existsSync(process.cwd() + '/public')) {
|
|
app.use(express.static(process.cwd() + '/public'));
|
|
} else {
|
|
app.use(express.static(path.join(__dirname, './public')));
|
|
}
|
|
|
|
// Enable CORS for everything
|
|
app.use(cors());
|
|
app.options('*', cors());
|
|
|
|
// Set app.router
|
|
app.use(app.router);
|
|
|
|
// Set API entry points
|
|
app.get('/db', routes.database)
|
|
app.get('/:resource', routes.list);
|
|
app.get('/:parent/:parentId/:resource', routes.nestedList);
|
|
app.get('/:resource/:id', routes.show);
|
|
app.post('/:resource', routes.create);
|
|
app.put('/:resource/:id', routes.update);
|
|
app.patch('/:resource/:id', routes.update);
|
|
app.del('/:resource/:id', routes.destroy);
|
|
|
|
// Set database
|
|
routes.setDatabase(db);
|
|
|
|
// And done! Ready to serve JSON!
|
|
return app;
|
|
}
|
|
|
|
function run(db, options) {
|
|
options = _.defaults(options, defaultOptions);
|
|
|
|
var app = createApp(db, options);
|
|
|
|
if (_.isEmpty(db)) {
|
|
logger.error('No resources found!');
|
|
} else {
|
|
logger.success('Available resources');
|
|
for (var prop in db) {
|
|
logger.url(options.port, prop);
|
|
}
|
|
}
|
|
|
|
http
|
|
.createServer(app)
|
|
.listen((options.port), function(){
|
|
logger.success('Express server listening on port ' + options.port);
|
|
logger.success('Congrats! Open http://localhost:' + options.port);
|
|
});
|
|
}
|
|
|
|
exports.createApp = createApp;
|
|
exports.run = run; |