在不使用 _id 的情况下从 MongoDB 检索一份文档时出现 500(内部服务器错误)

500 (Internal Server Error) when retrieving one document from MongoDB without using _id

我正在使用 MEAN 堆栈(我的第一个项目),但我找不到从 MongoDB 成功请求单个元素的解决方案。当用户想要编辑主页上给定列表中的项目时,将打开我描述的页面。我的目标是,点击项目的信息(来自主页)显示在编辑页面上。

这些是 server.js 中的相关行:

mongoose.connect("mongodb://localhost:27017/item_list", {useNewUrlParser: true, useCreateIndex: true});

<...>

const itemSchema = new mongoose.Schema({id: {type: Number, required: true},
  text: {type: String, required: true}
  }); 
  
<...>
//get single item from db
app.get('/item/:id', async (request, response) => {
  try{
  var result = await Item.findById( {id: request.params.id} ).exec();
  response.send(result);
}catch(error){
  response.status(500).send(error);
}});

在服务模块中,我使用以下函数调用 API:

getItem(id: number): Observable<Item> {
    const url = '/item/'+id;
    return this.http
      .get<Item>(url)
      .pipe(catchError(this.handleError<Item>(`getItem id=${id}`)));
  }

在“输出”模块的打字稿文件中,我使用了以下函数:

@Input() item: Item;

getItem(): void {
    const id = +this.route.snapshot.paramMap.get('id'); 
    this.itemService.getItem(id)
    .subscribe(item => this.item = item);
  }

路由包含项目的(唯一)ID,我分配给它 - 它是我的请求查询数据库的 ID。 这里是 link 从主页面到编辑页面的代码片段:

<a routerLink="/edit-item/ {{item.id}}">Edit</a>

但是,我收到内部服务器错误。我相信,问题出在 server.js 中的方法“.findById({...})”。我还有其他正在运行的请求(例如检索整个项目列表),因此数据库连接工作正常。非常感谢任何提示!

findById 是一种在模型上通过_id 查找文档的方法。

您可以查看文档 here

按如下方式替换该行以使其工作

  var result = await Item.findById( {_id: request.params.id} ).exec();

如果您需要通过不同的自定义 ID 进行查找并希望查询单个文档,请使用 findOne 作为记录 here