ExpressJs服务器以及命令行界面

时间:2016-03-02 02:11:17

标签: node.js express command-line-interface prompt

我正在使用express.js开发REST API服务器,但我想允许开发人员通过命令行发出命令。

它是一个开发服务器,它读取config.json,创建端点并在内存中存储数据。

我想让开发人员能够在不重新启动快速服务器的情况下重新加载基础数据。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

也许更好的选择是像这样添加一个到应用程序的路由(因为服务器将阻塞,因此不允许在同一进程上的任何命令行输入):

"use strict";

const http = require("http"),
    path = require("path"),
    express = require("express"),
    PORT = 8000;

var app = express();

function loadConfigFile(callback) {
    var configFile = false;
    try { // load config file if it exists
        configFile = require(path.join(__dirname, "config.json"));
    } catch(e) { // ignore if the config file doesn't exist
        if (e.code !== "MODULE_NOT_FOUND") {
            throw e
        }
    }
    callback(configFile); // argument will be false if file does not exist
}

function authenticateAdminUser(req) { return true; } // dummy logic

app.get("/admin/reload", function(req, res, next) {
    if (!authenticateAdminUser(req)) {
        let err = new Error("Forbidden");
        err.StatusCode = 403;
        return next(err);
    }

    loadConfigFile(function(file) {
        if (file) {
            // do something with the file here
        }
        res.send("Reloaded config file successfully.");
    });
});

loadConfigFile(function(file) {
    if (file) {
        // do something with the file here
    }
    app.listen(PORT, function() {
        console.log("Server started on port " + PORT + ".");
    });
});

答案 1 :(得分:0)

我只是想到了对我来说似乎是您可能感兴趣的问题的更优雅的解决方案:让服务器在其发生变化时自动重新加载config.json文件。在Node.js中实现这一点很简单:

const fs = require("fs"),
    path = require("path");

var filePath = path.join(__dirname, "config.json");
fs.watch(filePath, function(event) {
    if (event === "change") {
        var file = require(filePath); // require loads JSON as a JS object
        // do something with the newly loaded file here
        console.log("Detected change, config file automatically reloaded.");
    }
});