javascript - Mongodb - Express,如何正确获取 "id"?它给出一个空的 [Object, Object]

标签 javascript node.js database mongodb express

我正在尝试使用 MERN 堆栈构建应用程序, 这是我的元素模型:

const Item = require("../../models/Item");
const mongoose = require("mongoose");
const Schema = mongoose.Schema;

//Create Schema
const ItemSchema = new Schema({
  name: {
    type: String,
    required: true
  },
  createdAt: {
    type: Date,
    default: Date.now
  },
  handler:{
    type:String,
    required:true
  }
});

module.exports = Item = mongoose.model("item", ItemSchema);

使用 mongoose objectId 删除函数:

router.delete("/:id", auth, (req, res) => {
  var id =  mongoose.Schema.Types.ObjectId(req.params.id);
  Item.deleteOne({ _id: id})
    .then(() => {
      console.log(id);
      res.json({ success: true });
    })
    .catch(err => {
      console.log(err);
      res.status(404).json({ success: false });
    });
});

console.log(id)的结果是:

undefined

我尝试了不同的版本,例如使用 Mongodb ObjectId

const ObjectID = require("mongodb").ObjectId;
router.delete("/:id", auth, (req, res) => {
  var id = ObjectID(req.params.id).toString();
  Item.deleteOne({ _id: id})
    .then(() => {
      console.log(id);

这个console.log(id)给出:

Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters

我console.log(req.params)和结果:

params: { id: '[object Object]' }

如何正确检索 id 以从 Mongodb 数据库中删除该项目?我在 React 中的操作文件是这样的:

export const deleteItem = itemId => dispatch => {
  dispatch({ type: LOADING_ITEMS });
  axios
    .delete(`http://localhost:5000/api/items/${itemId}`)
    .then(res => {
      console.log(itemId)
      dispatch({
        type: DELETE_ITEM,
        payload: itemId
      });
    })
    .catch(err => console.log(err));

最佳答案

您没有提供有效的 Mongoose 对象 ID。

const express = require("express");
const mongoose = require("mongoose");
const app = express();
const port = 3000;

app.delete("/:id", (req, res) => {
  if (!mongoose.Types.ObjectId.isValid(req.params.id)) {
    return res.send("Please provide valid id");
  }
  var id = mongoose.Types.ObjectId(req.params.id);
  console.log(id);
  return res.send("Hello World!");
});

app.listen(port, () => console.log(`Example app listening on port ${port}!`));

以下是curl 请求:

curl -X DELETE http://localhost:3000/1 # Please provide valid id 
curl -X DELETE http://localhost:3000/4edd40c86762e0fb12000003 # Hello World!

关于javascript - Mongodb - Express,如何正确获取 "id"?它给出一个空的 [Object, Object],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58900823/

相关文章:

javascript - 套接字IO |如何在服务器端获取客户端传输类型?

mysql - SQL MIN() 奇怪的值

mysql - 如果没有结果,则将查询中的所有值初始化为 0,将 top 初始化为 NULL

javascript - 关于存储负载问题的推送网格

javascript - jQuery:意外的 token 非法

git - node.js 中本地安装的模块

mysql - 导入的用户 ID 和主键?

javascript - 将 Laravel 集合/数组转换为 Javascript 数组

使用唯一 ID 进行 Javascript 测试

javascript - 全局安装后找不到模块 'socket.io'