mirror of
https://github.com/typicode/json-server.git
synced 2025-07-28 20:52:08 +08:00
88 lines
1.9 KiB
JavaScript
88 lines
1.9 KiB
JavaScript
var fs = require('fs')
|
|
var chalk = require('chalk')
|
|
var minimist = require('minimist')
|
|
var request = require('superagent')
|
|
var low = require('low')
|
|
var server = require('./server')
|
|
|
|
// Output version
|
|
function version() {
|
|
var pkg = require('../package.json')
|
|
console.log(pkg.version)
|
|
}
|
|
|
|
// Output help.txt with some colors
|
|
function help() {
|
|
var txt = fs.readFileSync(__dirname + '/help.txt').toString()
|
|
txt = txt.replace(/json-server/g, chalk.green('json-server'))
|
|
console.log(txt)
|
|
}
|
|
|
|
// Start server
|
|
function start(port) {
|
|
for (var prop in low.db) {
|
|
console.log('http://localhost:' + port + '/' + chalk.green(prop))
|
|
}
|
|
|
|
console.log(
|
|
'\nEnter ' + chalk.green('`s`') + ' at any time to create a snapshot of the db\n'
|
|
)
|
|
process.stdin.resume()
|
|
process.stdin.setEncoding('utf8')
|
|
process.stdin.on('data', function (chunk) {
|
|
if (chunk.trim().toLowerCase() === 's') {
|
|
var file = 'db-' + Date.now() + '.json'
|
|
low.save(file)
|
|
console.log('\nSaved snapshot to ' + chalk.green(file) + '\n')
|
|
}
|
|
})
|
|
|
|
server.listen(port)
|
|
}
|
|
|
|
// Load source
|
|
function load(source, port) {
|
|
console.log(chalk.green('\n{^ ^} Heya!\n'))
|
|
|
|
console.log('Loading database from ' + source + '\n')
|
|
|
|
if (/\.json$/.test(source)) {
|
|
var path = process.cwd() + '/' + source
|
|
low.path = path
|
|
low.db = require(path);
|
|
start(port)
|
|
}
|
|
|
|
if (/\.js$/.test(source)) {
|
|
var path = process.cwd() + '/' + source
|
|
low.db = require(path).run();
|
|
start(port)
|
|
}
|
|
|
|
if (/^http/.test(source)) {
|
|
request
|
|
.get(source)
|
|
.end(function(err, res) {
|
|
if (err) {
|
|
console.error(err)
|
|
} else {
|
|
low.db = JSON.parse(res.text)
|
|
start(port)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// Uses minimist parsed argv
|
|
function run(argv) {
|
|
var source = argv._[0]
|
|
var port = argv.port || 3000
|
|
|
|
if (argv.version) return version()
|
|
if (source) return load(source, port)
|
|
|
|
help()
|
|
}
|
|
|
|
module.exports.run = run
|