在我的大多数REST应用程序中,我使用消息标准化中间件,它处理的每一条消息都是从json文件中获得的。到目前为止还不错。
ResponseMiddleware.js:
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
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包是如何工作的。
现在真正的问题是,在哪里保留常量,为什么保留
发布于 2021-12-08 18:26:27
在启动时,这一行只运行一次:
const messages = JSON.parse(fs.readFileSync(__dirname + "/message.json"));
从那时起,messages只是内存中的一个JS对象,每当调用它时,它就会被getMessage读取。也就是说,您的代码并不是在每个请求上创建文件系统绑定的I/O。你的方法看起来不错。
https://stackoverflow.com/questions/70279861
复制相似问题