500错误:对于值

时间:2017-06-11 13:55:33

标签: node.js mongoose

我从服务器收到错误。

  

“{”message“:{”message“:”为了对于模型\“评论\”“,”名称“:”CastError“,在路径\”_ id \“中为了对值\”authors \“而转换为ObjectId失败, “stringValue的”: “\” \作者 “”, “种类”: “的ObjectId”, “值”: “作者”, “路径”: “_ ID”}}“

我有模特:

var mongoose = require("mongoose");
var Schema = mongoose.Schema;

var commentSchema = new Schema({
  author: String,
  title: String,
  text: String,
  favorite: Number
});

var Comment = mongoose.model("Comment", commentSchema);

module.exports = Comment;  

从Angular 2编写的客户端,我使用以下方法发送请求:

getAuthors() {
         return this.http.get(this.appConfig.urlServer + "/comment/authors")
             .map((response: Response) => response.json());
}  

我有下一条路线:

var express = require("express");
var mongoose = require("mongoose");
var Comment = require("../models/comment");
var router = express.Router();

router.get("/comment/authors", getAuthorsOfComments);

module.exports = router;

function getAuthorsOfComments(req, res) {
    Comment.find({}, 'author', function(err, authors) {
    if (err) {
      res.status(500).json({
        message: err
      })
    }

    if (authors) {
      res.status(200).json({
        authors: authors
      })
    }
  })
}

请帮帮我。我不知道为什么我会收到错误。

更新1。

Comment集合中的条目。 第一次进入:

{
    "_id" : ObjectId("59269000483977cefe7961e0"),
    "author" : "test",
    "title" : "title of text",
    "text" : "Big text",
    "favorite" : 1
}

第二项:

{
    "_id" : ObjectId("5926901b483977cefe7961f2"),
    "author" : "test2",
    "title" : "title of text",
    "text" : "Big text",
    "favorite" : 5
}

1 个答案:

答案 0 :(得分:0)

实际问题在于您的查询方法,您没有正确查询数据库而没有正确调用回调函数。我将重写您的查询代码。

function getAuthorsOfComments(req, res) {
    Comment.find({}, {author: 1}).then( function(err, authors) {
    if (err) {
      res.status(500).json({
        message: err
      })
    }

    if (authors) {
      res.status(200).json({
        authors: authors
      })
    }
  })
}

{author:1} 告诉 mongoDB 只返回作者。如果你把0而不是1, mongoDB 将返回所有字段,但不是作者。