类型错误:stores.forEach 不是函数

问题描述

我正在使用 Nodejs 和 MongoDB 创建商店定位器应用程序。 无法将数据从 MongoDB 检索到我的 API。 Postman 和 MongoDB 之间的连接运行良好,我可以在 MongoDB 中看到数据,但无法从 MongoDB 获取数据到我的前端 API。 forEach 循环不起作用

app.js

const {response} = require('express')
const express = require('express')
const mongoose = require('mongoose')
const app = express()
const port = 3000
const Store = require('./api/models/store')

app.use(function(req,res,next) {
  res.header('Access-Control-Allow-Origin',"*");
  next();
}) 

mongoose.connect('mongodb+srv://ashish_pwj:<password>@cluster0.vujgx.mongodb.net/test?retryWrites=true&w=majority',{
  useNewUrlParser: true,useUnifiedTopology: true
});

app.use(express.json({
  limit: '50mb'
}))

app.get('/api/stores',(req,res) => {
  let dbStores = [];
  let stores = req.body;
  stores.forEach((store) => {
    dbStores.push({
      storeName: store.name,phoneNumber: store.phoneNumber,address: store.address,openStatusText: store.openStatusText,addressLines: store.addressLines,location: {
        type: 'Point',coordinates: [
          store.coordinates.longitude,store.coordinates.latitude
        ]
      }
    })
  });

  Store.create(dbStores,(err,stores)=>{
    if(err){
      res.status(500).send(err)
    } else {
      res.status(200).send(stores)
    }
  })

  // console.log(dbStores)
  // console.log('HERE!')
  // console.log(req)
  /*var store = new Store({
    storeName: "test",phoneNumber: "2629265158",location: {
      "type": "Point","coordinates": [
        -122.5,37.7
      ]
    }
  })
  store.save()*/  
  // res.send('You have posted')
})

app.delete('/api/stores',res) => {
  Store.deleteMany({},(err)=>{
    res.status(200).send(err)
  })
})

app.get('/api/stores',res) => {
  // res.send('Hello World!')
  Store.find({},stores)=>{
    if(err) {
      res.status(500).send(err)
    } else {
      res.status(200).send(stores)
    }
  })
})

app.listen(port,() => {
  console.log(`Example app listening at http://localhost:${port}`)
})

请求一个商店的 Json:

{
    "recommendation": {},"storeNumber": "5758-13907","id": "15051","name": "La Cienega & Gregory Way","phoneNumber": "310-659-9562","coordinates": {
        "latitude": 34.063584,"longitude": -118.376354
    },"regulations": [],"address": {
        "streetAddressLine1": "257 S. La Cienega Blvd.","streetAddressLine2": null,"streetAddressLine3": null,"city": "Beverly Hills","countrySubdivisionCode": "CA","countryCode": "US","postalCode": "902113301"
    },"timeZoneInfo": {
        "currentTimeOffset": -420,"windowsTimeZoneId": "Pacific Standard Time","olsonTimeZoneId": "GMT-08:00 America/Los_Angeles"
    },"brandName": "Starbucks","ownershipTypeCode": "CO","open": true,"openStatusText": "Open until 6:00 PM","addressLines": ["257 S. La Cienega Blvd.","Beverly Hills,CA 90211"],"mop": {
        "ready": false,"wait": null
    }
}

我从邮递员那里得到的一家商店的响应 Json 片段:

{
        "location": {
            "coordinates": [
                -118.376354,34.063584
            ],"type": "Point"
        },"addressLines": [
            "257 S. La Cienega Blvd.",CA 90211"
        ],"_id": "600d1f521efed638d808d32e","storeName": "La Cienega & Gregory Way","address": {
            "streetAddressLine1": "257 S. La Cienega Blvd.","postalCode": "902113301"
        },"__v": 0
    },

解决方法

stores 必须是数组才能使用 forEach 方法对其进行迭代