मेरा प्रश्न वास्तव में नोड या एक्सप्रेस. मुझे इस प्रारूप में प्रतिक्रिया चाहिए।

प्रतिक्रिया एपीआई के लिए नमूना प्रारूप

{
"success":true,
"code":200,
"message":"Ok",
"data": []
}

मैंने उपरोक्त प्रश्न में दिए गए सभी तरीकों का पालन किया, लेकिन फिर भी मैं सही उत्तर को क्रैक नहीं कर सका। चूंकि मेरे पास कई एपीआई हैं, इसलिए मुझे प्रत्येक एपीआई के लिए इस प्रतिक्रिया प्रारूप की आवश्यकता है।

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.use((req, res, next) => {
    res.header("Access-Control-Allow-Origin", "*");
    res.header(
        "Access-Control-Allow-Headers",
        "Origin, X-Requested-With, Content-Type, Accept, Authorization"
    );
    if (req.method === "OPTIONS") {
        res.header("Access-Control-Allow-Methods", "POST,  DELETE, GET");
        return res.status(200).json({});
    }
    next();
});
app.use("/api", employeeRoutes);
app.use("/api", groupRoutes);

app.use((req, res, next) => {
    const error = new Error("Not found");
    error.status = 404;
    next(error);
});

उपरोक्त स्निपेट मेरी app.js फ़ाइल का है। और मेरा रूट कोड कुछ इस तरह दिखता है।

exports.groups_Get_All = (req, res, next) => {
    Group.find()
        .exec()
        .then(docs => {
            const response =
                docs.map(doc => {
                    return {
                        gname: doc.gname,
                        employee: doc.employeeId,
                        _id: doc._id,
                        createdAt: doc.createdAt
                    };
                })
            res.send((response));
        })
        .catch(err => {
            console.log(err);
            res.status(500).json({
                error: err
            });
        });
};

अभी मुझे जेसन प्रारूप में सिर्फ सादा डेटा की प्रतिक्रिया मिल रही है।

[
    {
        "gname": "wordpres",
        "employee": [
            "5c6568102773231f0ac75303"
        ],
        "_id": "5c66b6453f04442603151887",
        "createdAt": "2019-02-15T12:53:25.699Z"
    },
    {
        "gname": "wordpress",
        "employee": [
            "5c6568102773231f0ac75303"
        ],
        "_id": "5c66cbcf1850402958e1793f",
        "createdAt": "2019-02-15T14:25:19.488Z"
    }
]

अब मेरा सवाल यह है कि इस नमूना प्रारूप प्रतिक्रिया को प्रत्येक एपीआई (वैश्विक दायरे) पर कैसे कार्यान्वित किया जाए?

2
darshan a n 18 फरवरी 2019, 12:31

1 उत्तर

सबसे बढ़िया उत्तर

यदि आप एक्सप्रेस का उपयोग कर रहे हैं, तो नियंत्रक से संदेश न भेजें। एक मिडलवेयर बनाएं जिसका मुख्य उद्देश्य क्लाइंट को प्रतिक्रिया भेजना है। यह आपको क्लाइंट को consist प्रतिक्रिया का प्रारूप सेट करने की शक्ति देगा।

उदाहरण के लिए मैंने प्रतिक्रिया मिडलवेयर इस तरह बनाया है: -

module.exports = function(req, res, next) {
  const message = {};
  message.body = req.responseObject;
  message.success = true;
  message.status = req.responseStatus || 200;
  res.status(message.status).send(message);
  return next();
};

उपरोक्त कोड इस तरह का प्रारूप उत्पन्न करेगा।

{
  "success": true,
  "status": 200,
  "body": {
    "name": "rahul"
  }
}

आप एक्सप्रेस की अनुरोध उत्थानकर्ता संपत्ति का उपयोग कर सकते हैं। आप पिछले मिडलवेयर से प्रतिक्रिया ऑब्जेक्ट और प्रतिक्रिया स्थिति जोड़ सकते हैं।

इसी तरह अलग मिडलवेयर में त्रुटियां की जा सकती हैं।

आप इसके द्वारा अपने मार्गों में कॉल कर सकते हैं: -

const responseSender = require('./../middleware/responseSender');
 /* your rest middleware. and put responseSender middleware to the last.*/
router.get('/',/* Your middlewares */, responseSender);

आप इसे कॉल कर सकते हैं:-

exports.groups_Get_All = (req, res, next) => {
    Group.find()
        .exec()
        .then(docs => {
            const response =
                docs.map(doc => {
                    return {
                        gname: doc.gname,
                        employee: doc.employeeId,
                        _id: doc._id,
                        createdAt: doc.createdAt
                    };
                })

            req.responseObject = response; // This will suffice
            return next()
        })
        .catch(next);
}
1
Supermacy 18 फरवरी 2019, 11:11