如何进行模块化快递请求



我想重用一个代码片段,这将为我节省大量时间。我想使POST、DELETE、PATCH和GET请求模块化。

我有一个js文件,它定义了每个模块(mod(的基本路径,由于我使用了23个模块,它们的功能都是一样的,所以我想走这个快捷方式。以下是";基本路由文件";

let route = "";
let mod = undefined;
router.get("/" + route, verify, async (req, res) => {
const id = req.query.id;
let data;
if (id) {
data = await mod.findOne({_id: id});
} else {
data = await mod.find({});
}
if (data)
return res.status(200).json({status: 404, message: "The data can't be found!", data: []});
else
return res.status(200).json({status: 200, message: "Found data!", data: data});
});
router.post("/" + route, verify, async (req, res) => {
let data = new mod(req.body);
data = await data.save();
if (data)
return res.status(200).json({status: 404, message: "The data can't be found!", data: []});
else
return res.status(200).json({status: 200, message: "Found data!", data: data});
});
router.patch("/" + route, verify, async (req, res) => {
const id = req.query.id;
let data;
if (id) {
data = await mod.updateOne({_id: id}, {$set: req.body});
}
if (!data)
return res.status(200).json({status: 404, message: "The data can't be found!", data: []});
else
return res.status(200).json({status: 200, message: "Found data and updated!", data: data});
});
router.delete("/" + route, verify, async (req, res) => {
const id = req.query.id;
let data;
if (id) {
data = await mod.deleteOne({_id: id});
}
if (!data)
return res.status(200).json({status: 404, message: "The data can't be found!", data: []});
else
return res.status(200).json({status: 200, message: "Found data and deleted!", data: data});
});
module.exports = function(proute, pmodule){
route = proute;
module = pmodule;
return router;
};

在另一个路由器文件中,我告诉每个路由它们正在使用哪个模块以及它们的名称。

router.use(yukir("disc-server", DiscServer));
router.use(yukir("disc-user", User));
router.use(yukir("autochannel", AutoChannel));

问题是我没有得到任何错误,但404错误,所以找不到路线,这真的很奇怪。有人能帮我吗?

您的问题是Javascript中的字符串是按值传递的,而不是按引用传递的,因此在调用router方法时,route和mod分别是空字符串和未定义字符串。路由器功能因此总是在CCD_ 1处注册路由。将您的路线定义代码封装在工厂函数中,您就可以了。

最新更新