এক্সপ্রেসে আমার কয়েকটি অ্যাপ্লিকেশন দিয়ে আমি যে দুর্দান্ত কৌশলটি ব্যবহার শুরু করেছি তা হ'ল এমন একটি বস্তু তৈরি করা যা ক্যোয়ারী, প্যারাম এবং এক্সপ্রেসের অনুরোধের বস্তুর বডি ফিল্ডগুলিকে একত্রিত করে।
//./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";
}
}