Javascript Reactjs/Next.js避免函数重复
我正在使用Next.js/React,并在一个Javascript Reactjs/Next.js避免函数重复,javascript,node.js,reactjs,mongodb,next.js,Javascript,Node.js,Reactjs,Mongodb,Next.js,我正在使用Next.js/React,并在一个getServerSideProps()中获取mongodb数据作为道具传递给页面,从而传递给我的组件 为了获取这些数据,我使用了一些函数,除了集合的名称之外,这些函数都是重复的。由于数据库是使用一些\u Join集合来构建的,所以我会对每个数据进行两次查询 有没有办法避免重复这些功能?我不确定是否应该通过避免函数重复多次来简化js本身,或者改进mongodb查询以使其成为一个查询 代码(在getServerSideProps中)如下所示: //..
getServerSideProps()
中获取mongodb数据作为道具传递给页面,从而传递给我的组件
为了获取这些数据,我使用了一些函数,除了集合的名称之外,这些函数都是重复的。由于数据库是使用一些\u Join集合来构建的,所以我会对每个数据进行两次查询
有没有办法避免重复这些功能?我不确定是否应该通过避免函数重复多次来简化js本身,或者改进mongodb查询以使其成为一个查询
代码(在getServerSideProps中)如下所示:
//...etc
// # FUNCTION 20
// ...
// # FUNCTION 21
var acce = null
const midAcce = await db.collection('_Join:users:Accessories').find({ relatedId: userId }).toArray()
if (midAcce.length) {
acce = []
for (let r=0; r < midAcce.length; r++) {
const foundAcce = await db.collection('Accessories').find({ _id: midAcce[r].owningId }).toArray()
if (foundAcce[0].image[0].src){
let acceObj = {
name: foundAcce[0].name,
image: foundAcce[0].image[0].src
}
acce.push(acceObj)
}
}
}
// # FUNCTION 22
var equip = null
const midEquip = await db.collection('_Join:users:Equipments').find({ relatedId: userId }).toArray()
if (midEquip.length) {
equip = []
for (let r=0; r < midEquip.length; r++) {
const foundEquip = await db.collection('Equipments').find({ _id: midEquip[r].owningId }).toArray()
if (foundEquip[0].image[0].src){
let equipObj = {
name: foundEquip[0].name,
image: foundEquip[0].image[0].src
}
equip.push(equipObj)
}
}
}
// position for google maps ("foundUser" is retrieved earlier on, don't mind about this pos)
var pos = null
if (foundUser[0].cont.addr){
pos = foundUser[0].cont.addr
}else if (foundUser[0].loc){
pos = foundUser[0].loc
}
// finally create object to pass as props to the page then to component
forcomponent = {
// ... many more as the two below
acce: acce,
equip: equip,
pos: pos
}
/…等
//#功能20
// ...
//#功能21
var acce=null
const midAcce=await db.collection(“”“加入:用户:附件”).find({relatedId:userId}).toArray()
if(中间加速长度){
acce=[]
对于(设r=0;r
要回答您的设计问题,请考虑下一个编写代码的人。如果您创建一个api,该api接受一个参数来告诉该人员是处理设备还是处理附件,那么它是否有助于该人员理解和维护代码?它会帮助可能重构您的数据库的人吗?或者它只是提高了理解你的代码的维护者的障碍?这也是要考虑的!那么,将多个函数/调用留给db是否是这样的好做法(或者至少是正常的做法)?我想说,维护20个变量命名略有不同的代码示例本身就是一个问题。我想我将以两个数组作为集合名的forLoop开始。。你知道有没有更好的方法来进行mongodb查询吗?@max同意。如果它们是几乎相同的多个方法,那么一定要将它们参数化并统一起来。。但是一定要写一些注释(也许是JSDoc注释)来解释如何使用统一方法。认真对待构建抽象对下一个人的影响,并加以解释。要回答您的设计问题,请考虑下一个处理您的代码的人。如果您创建一个api,该api接受一个参数来告诉该人员是处理设备还是处理附件,那么它是否有助于该人员理解和维护代码?它会帮助可能重构您的数据库的人吗?或者它只是提高了理解你的代码的维护者的障碍?这也是要考虑的!那么,将多个函数/调用留给db是否是这样的好做法(或者至少是正常的做法)?我想说,维护20个变量命名略有不同的代码示例本身就是一个问题。我想我将以两个数组作为集合名的forLoop开始。。你知道有没有更好的方法来进行mongodb查询吗?@max同意。如果它们是几乎相同的多个方法,那么一定要将它们参数化并统一起来。。但是一定要写一些注释(也许是JSDoc注释)来解释如何使用统一方法。认真对待构建抽象对下一个人的影响,并解释它。