首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务器消息标准化,常量保存在哪里?

服务器消息标准化,常量保存在哪里?
EN

Stack Overflow用户
提问于 2021-12-08 18:16:24
回答 1查看 120关注 0票数 0

在我的大多数REST应用程序中,我使用消息标准化中间件,它处理的每一条消息都是从json文件中获得的。到目前为止还不错。

ResponseMiddleware.js:

代码语言:javascript
复制
import { getMessage } from "../common/messages.js";

const TYPE_JSON = "application/json";
const STATUS_CODE_OK = 200;
const STATUS_CODE_BAD_REQUEST = 400;
const STATUS_CODE_UNAUTHORIZED = 401;
const STATUS_CODE_NOT_FOUND = 404;
const STATUS_CODE_SERVER_ERROR = 500;

const jsonOK = function (data, message, metadata) {
    const status = STATUS_CODE_OK;
    data = data ? data : null;
    message = message ? message : getMessage("default.successfulRequest");
    metadata = metadata ? metadata : {};

    this.status(status);
    this.type(TYPE_JSON);

    return this.json({ message, data, metadata, status: status });
};

const jsonBadRequest = function (data, message, metadata) {
    const status = STATUS_CODE_BAD_REQUEST;
    data = data ? data : null;
    message = message ? message : getMessage("default.badRequest");
    metadata = metadata ? metadata : {};

    this.status(status);
    this.type(TYPE_JSON);

    return this.json({ message, data, metadata, status: status });
};

const jsonUnauthorized = function (data, message, metadata) {
    const status = STATUS_CODE_UNAUTHORIZED;
    data = data ? data : null;
    message = message ? message : getMessage("default.unauthorized");
    metadata = metadata ? metadata : {};

    this.status(status);
    this.type(TYPE_JSON);

    return this.json({ message, data, metadata, status: status });
};

const jsonNotFound = function (data, message, metadata) {
    const status = STATUS_CODE_NOT_FOUND;
    data = data ? data : null;
    message = message ? message : getMessage("default.notfound");
    metadata = metadata ? metadata : {};

    this.status(status);
    this.type(TYPE_JSON);

    return this.json({ message, data, metadata, status: status });
};

const jsonServerError = function (data, message, metadata) {
    const status = STATUS_CODE_SERVER_ERROR;
    data = data ? data : null;
    message = message ? message : getMessage("default.server.error");
    metadata = metadata ? metadata : {};

    this.status(status);
    this.type(TYPE_JSON);

    return this.json({ message, data, metadata, status: status });
};

export const response = (req, res, next) => {
    res.jsonOK = jsonOK;
    res.jsonBadRequest = jsonBadRequest;
    res.jsonUnauthorized = jsonUnauthorized;
    res.jsonNotFound = jsonNotFound;
    res.jsonServerError = jsonServerError;

    next();
};

Messages.js

代码语言:javascript
复制
import fs from "fs";
import { dirname } from "path";
import { fileURLToPath } from "url";

const __dirname = dirname(fileURLToPath(import.meta.url));

const messages = JSON.parse(fs.readFileSync(__dirname + "/message.json"));

export const getMessage = (path) => {
    return messages[path] || null;
};

至少是这样,直到我回答了这个问题How do you share constants in NodeJS modules?。我没有看到任何类似于我正在做的事情,我一直在研究它,甚至没有人考虑从json文件中读取常量。

我认为,如果每次访问文件,fs都需要打开一个连接并关闭它,那么这种方法的成本可能太高了。如果fs能够使连接保持打开状态会更好,因为它将需要一直使用它。但我想声明,我不知道fs包是如何工作的。

现在真正的问题是,在哪里保留常量,为什么保留

EN

回答 1

Stack Overflow用户

发布于 2021-12-08 18:26:27

在启动时,这一行只运行一次:

const messages = JSON.parse(fs.readFileSync(__dirname + "/message.json"));

从那时起,messages只是内存中的一个JS对象,每当调用它时,它就会被getMessage读取。也就是说,您的代码并不是在每个请求上创建文件系统绑定的I/O。你的方法看起来不错。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70279861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档