node.js - Foreach 对于来自查询的数据未定义

标签 node.js npm-shrinkwrap

如果我不在我的 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 - 因为只有一个已定义 - errfoodtrucks。当你不检查错误时,有时你会访问未定义的数据,并会得到这样的错误。

关于node.js - Foreach 对于来自查询的数据未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42906526/

相关文章:

node.js - Electron Windows Store events.js 抛出未处理的 'error' 事件

mysql - 带有mysql查询的异步函数不会返回查询结果node.js

node.js - 如何防止可传递的开发依赖被收缩包装

node.js - 强制依赖使用特定的子依赖版本

node.js - socket.io,io 未定义(JS 错误)

javascript - 获取请求中的错误不会停止功能

node.js - 数据库更新后nodejs自动刷新 View

node.js - 为什么 npm-shrinkwrap 每次都会在名称和 URL 之间翻转?

npm - npm-shrinkwrap.json 和 package-lock.json 有什么区别?

node.js - 对同一服务器上的多个工作区使用共享的 npm node_modules/