Express'teki bazı uygulamalarımla kullanmaya başladığım güzel bir teknik, ifade istek nesnesinin sorgusunu, parametrelerini ve gövde alanlarını birleştiren bir nesne oluşturmaktır.
//./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;
Daha sonra kontrol cihazınızın gövdesinde veya ekspres istek zinciri kapsamında başka herhangi bir yerde, aşağıdaki gibi bir şey kullanabilirsiniz:
//./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);
});
Bu, bir kullanıcının isteği ile göndermiş olabileceği tüm "özel verileri" yalnızca "araştırmayı" güzel ve kullanışlı hale getirir.
Not
Neden 'sahne' alanı? Bu bir kısmi snippet olduğundan, bu tekniği bir dizi API'mda kullanıyorum, ayrıca kimlik doğrulama / yetkilendirme verilerini bu nesneye, örneğin aşağıdaki örnekte saklıyorum.
/*
* @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";
}
}