เทคนิคที่ดีที่ฉันเริ่มใช้กับแอพของฉันบน express คือการสร้างวัตถุที่ผสานการสืบค้น params และฟิลด์เนื้อหาของวัตถุคำขอของ express
//./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);
});
นี้จะทำให้มันมีความสุขและมีประโยชน์เพียงแค่ "เจาะ" ในทั้งหมดของ "ข้อมูลที่กำหนดเอง" ผู้ใช้อาจจะส่งขึ้นมาพร้อมกับคำขอของพวกเขา
บันทึก
ทำไมต้องเป็นฟิลด์ 'อุปกรณ์ประกอบฉาก'? เนื่องจากนั่นเป็นตัวอย่างข้อมูลแบบตัดลงฉันจึงใช้เทคนิคนี้ใน API จำนวนหนึ่งของฉันฉันจึงเก็บข้อมูลการตรวจสอบ / การอนุญาตลงในวัตถุนี้ตัวอย่างด้านล่าง
/*
* @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";
}
}