У меня есть служебный файл, который в основном имеет две функции (одна для определения местоположения пользователя и другая для получения сведений об устройстве пользователя), выступающая в качестве промежуточного программного обеспечения. Теперь я хотел бы знать, возможно ли объединить оба промежуточного программного обеспечения в одно целое, чтобы его можно было использовать с другими промежуточными программами на маршруте. Я также хотел бы иметь свободу использования функций из служебного файла индивидуально, когда это необходимо.
Файл утилиты
const axios = require("axios");
const requestIp = require("request-ip");
const getDeviceLocation = async (req, res, next) => {
try {
// ToDO: Check if it works on production
const clientIp = requestIp.getClientIp(req);
const ipToCheck = clientIp === "::1" || "127.0.0.1" ? "" : clientIp;
const details = await axios.get("https://geoip-db.com/json/" + ipToCheck);
// Attach returned results to the request body
req.body.country = details.data.country_name;
req.body.state = details.data.state;
req.body.city = details.data.city;
// Run next middleware
next();
}
catch(error) {
return res.status(500).json({ message: "ERROR_OCCURRED" });
}
};
const getDeviceClient = async (req, res, next) => {
const userAgent = req.headers["user-agent"];
console.log("Device UA: " + userAgent);
next();
};
module.exports = { getDeviceLocation, getDeviceClient };
Примеры маршрутов
app.post("/v1/register", [getDeviceLocation, getDeviceClient, Otp.verify], User.create);
app.post("/v1/auth/google", [getDeviceLocation, getDeviceClient, Auth.verifyGoogleIdToken], Auth.useGoogle);
Я бы хотел объединить getDeviceLocation
и getDeviceClient
в одно слово getDeviceInfo
, но при этом иметь возможность использовать getDeviceLocation
и getDeviceClient
по отдельности, когда это требуется на любом маршруте.