簡體   English   中英

對於來自查詢的數據,Foreach未定義

[英]Foreach undefined for data that comes from query

如果我不在我的aws ubuntu 14.04機器上使用shrinkwrapyarn ,我的查詢工作正常。

但是,同樣的查詢在本地機器上使用shrinkwrap / yarn工作正常,但不知何故它們在aws機器上不起作用。

查詢如下所示:

var express = require('express');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var foodtr = require('./../model/foodtruck');

var foodtrucklist = function(req, res) {
    foodtr.find().populate('item_list').exec(function(err, foodtrucks) {
        foodtrucks.forEach(function(ftr) {
            var start_time = ftr.foodtruck_starting_timing;
            var end_time = ftr.foodtruck_closing_timing;
            var foodtruck_open_status = ftr.foodtruck_open_status;
            // var shut_down = ftr.foodtruck_shutdown;
            if ((start_time && end_time) &&
                (start_time.trim() != '' &&
                    end_time.trim() != '')) {
                if (inTime(start_time, end_time) &&
                    foodtruck_open_status ==0 ) {
                    ftr.foodtruck_open_status = 0;
                    ftr.save();
                } else {
                    ftr.foodtruck_open_status = 1;
                    ftr.save();
                }
            }
        })

        res.json({
            status: '200',
            message: 'foodtrucklist',
            data: foodtrucks
        });
    });
};

我得到的錯誤是:

events.js:160
      throw er; // Unhandled 'error' event
      ^

TypeError: Cannot read property 'forEach' of undefined
    at /home/bitnami/quflipNodeAPI/controller/foodtrucklist.js:9:19
    at /home/bitnami/quflipNodeAPI/node_modules/mongoose/lib/query.js:2745:9
    at newTickHandler (/home/bitnami/quflipNodeAPI/node_modules/mpromise/lib/promise.js:234:18)
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickDomainCallback (internal/process/next_tick.js:122:9)

你需要處理錯誤:

foodtr.find().populate('item_list').exec(function(err, foodtrucks) {
    // INSERT ERROR HANDLING HERE
    foodtrucks.forEach(function(ftr) {

例如:

foodtr.find().populate('item_list').exec(function(err, foodtrucks) {
    if (err) {
        console.log('ERROR:', err);
        return res.status(500).json({ error: err });
    }
    foodtrucks.forEach(function(ftr) {

只有在沒有定義err時才應該訪問foodtrucks - 因為它只是定義了一個 - err或者是foodtrucks 如果不檢查錯誤,有時會訪問未定義的數據,並且會出現這樣的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM