Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Reactjs/Next.js避免函数重复_Javascript_Node.js_Reactjs_Mongodb_Next.js - Fatal编程技术网

Javascript Reactjs/Next.js避免函数重复

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中)如下所示: //..

我正在使用Next.js/React,并在一个
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注释)来解释如何使用统一方法。认真对待构建抽象对下一个人的影响,并解释它。