node.js - 当我尝试将数据传递给 Node 中的响应时,我得到 : "error": {"message" :"Cannot read property ' length' of undefined",

标签 node.js mongodb express mongoose crud

每当我尝试将任何数据传递给 Node 中的响应时,我都会收到上述错误。这是我的显示操作代码:

const show = (req, res, next) => {
  User.findOne({"_id": req.currentUser._id}).then(function (user){
    console.log(user.events.id(req.params.id));
    return user.events.id(req.params.id);
   return concert;
  })
    .then(concert => concert ? res.json({ concert }) : next())
    .catch(err => next(err));
};

console.log 返回的正是我所期望的。如果我将 res.json 更改为 res.sendStatus('200') 我会得到 200 返回。我认为错误源于响应尝试计算它返回的正文的长度。

堆栈跟踪说:

Trace
    at /Users/louisarnos/wdi/projects/capstone-project/capstone-backend/app/controllers/events.js:22:12
    at process._tickCallback (node.js:369:9)
TypeError: Cannot read property 'length' of undefined
    at EmbeddedDocument.length (/Users/louisarnos/wdi/projects/capstone-project/capstone-backend/app/models/event.js:48:19)
    at VirtualType.applyGetters (/Users/louisarnos/wdi/projects/capstone-project/capstone-backend/node_modules/mongoose/lib/virtualtype.js:77:25)
    at EmbeddedDocument.Document.get (/Users/louisarnos/wdi/projects/capstone-project/capstone-backend/node_modules/mongoose/lib/document.js:870:18)
    at applyGetters (/Users/louisarnos/wdi/projects/capstone-project/capstone-backend/node_modules/mongoose/lib/document.js:2173:35)
    at EmbeddedDocument.Document.$toObject (/Users/louisarnos/wdi/projects/capstone-project/capstone-backend/node_modules/mongoose/lib/document.js:1957:5)
    at EmbeddedDocument.Document.toJSON (/Users/louisarnos/wdi/projects/capstone-project/capstone-backend/node_modules/mongoose/lib/document.js:2199:15)
    at Object.stringify (native)
    at ServerResponse.json (/Users/louisarnos/wdi/projects/capstone-project/capstone-backend/node_modules/express/lib/response.js:242:19)
    at ServerResponse.send (/Users/louisarnos/wdi/projects/capstone-project/capstone-backend/node_modules/express/lib/response.js:151:21)
    at /Users/louisarnos/wdi/projects/capstone-project/capstone-backend/app/controllers/events.js:25:36
    at process._tickCallback (node.js:369:9)

这是我的用户架构:

const userSchema = new mongoose.Schema({
  email: {
    type: String,
    unique: true,
    required: true,
  },
  token: {
    type: String,
    require: true,
  },
  events: [EventSchema],
  passwordDigest: String,
}, {
  timestamps: true,
});

还有我的事件架构:

'use strict';

const mongoose = require('mongoose');

const eventSchema = new mongoose.Schema({
  artist: {
    type: String,
    required: true,
  },
  location: {
    venue: {
      name: {
        type: String,
        required: true,
      },
      city: {
        type: String,
        required: true,
      },
      region: {
        type: String,
        required: true,
      }
    }
  },
  date: {
    month: {
      type: String,
      required: true,
    },
    day: {
      name: {
        type: String,
        required: true,
      },
      num_of_day: {
        type: Number,
        required: true,
      }
    }
  }
}, {
  timestamps: true,
  toJSON: { virtuals: true },
});

eventSchema.virtual('length').get(function length() {
  return this.text.length;
});

const Event = mongoose.model('Event', eventSchema);

module.exports = Event;

最佳答案

这是抛出错误的地方:

eventSchema.virtual('length').get(function length() {
  return this.text.length;
});

text 不是架构中定义的属性,因此它是未定义的。

关于node.js - 当我尝试将数据传递给 Node 中的响应时,我得到 : "error": {"message" :"Cannot read property ' length' of undefined",,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37599032/

相关文章:

javascript - Node.js API 与 express 和 mysql - WHERE IN 和带有多个逗号分隔值的绑定(bind)参数

node.js - 异步错误未达到Express错误中间件

node.js 和主宰发布/订阅

c# - 如何使用 mongodb 和 linq 来存储大型二进制对象(文件)?

javascript - 要求和导入显示不同的行为。为什么会这样?

Node.js + Redis 内存泄漏。难道我做错了什么?

javascript - 如何在node.js中指定模块路径

mongodb - 带有嵌套 $cond 的 $filter

javascript - 部署后辅助函数中 mongodb 属性中的 Meteor Session.set() 不起作用

node.js - 从 git checkout 构建 yeoman 项目