mirror of
https://github.com/typicode/json-server.git
synced 2025-07-28 04:32:24 +08:00
First commit
This commit is contained in:
95
server.js
Normal file
95
server.js
Normal file
@ -0,0 +1,95 @@
|
||||
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
|
||||
console.log(fs.existsSync(process.cwd() + '/public'), process.cwd() + '/public')
|
||||
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;
|
Reference in New Issue
Block a user