एक अच्छी तकनीक जिसे मैंने एक्सप्रेस में अपने कुछ ऐप्स के साथ उपयोग करना शुरू किया है, वह एक ऑब्जेक्ट बनाने के लिए है जो एक्सप्रेस के अनुरोध ऑब्जेक्ट के क्वेरी, पैराम्स और बॉडी फ़ील्ड को मर्ज करता है।
//./express-data.js
const _ = require("lodash");
class ExpressData {
/*
* @param {Object} req - express request object
*/
constructor (req) {
//Merge all data passed by the client in the request
this.props = _.merge(req.body, req.params, req.query);
}
}
module.exports = ExpressData;
फिर आपके नियंत्रक निकाय में, या कहीं और भी एक्सप्रेस अनुरोध श्रृंखला के दायरे में, आप नीचे कुछ का उपयोग कर सकते हैं:
//./some-controller.js
const ExpressData = require("./express-data.js");
const router = require("express").Router();
router.get("/:some_id", (req, res) => {
let props = new ExpressData(req).props;
//Given the request "/592363122?foo=bar&hello=world"
//the below would log out
// {
// some_id: 592363122,
// foo: 'bar',
// hello: 'world'
// }
console.log(props);
return res.json(props);
});
यह अच्छा है और "कस्टम डेटा" के सभी "उपयोगकर्ता" उनके अनुरोध के साथ भेजा हो सकता है में "तल्लीन" करने के लिए आसान है।
ध्यान दें
'सहारा' क्षेत्र क्यों? क्योंकि यह एक कट-डाउन स्निपेट था, मैं इस तकनीक का उपयोग अपने कई एपीआई में करता हूं, मैं इस ऑब्जेक्ट पर प्रमाणीकरण / प्राधिकरण डेटा भी संग्रहीत करता हूं, उदाहरण के लिए नीचे।
/*
* @param {Object} req - Request response object
*/
class ExpressData {
/*
* @param {Object} req - express request object
*/
constructor (req) {
//Merge all data passed by the client in the request
this.props = _.merge(req.body, req.params, req.query);
//Store reference to the user
this.user = req.user || null;
//API connected devices (Mobile app..) will send x-client header with requests, web context is implied.
//This is used to determine how the user is connecting to the API
this.client = (req.headers) ? (req.headers["x-client"] || (req.client || "web")) : "web";
}
}