【问题标题】:How to get data from model in node express?如何从节点快递中的模型获取数据?
【发布时间】:2021-06-04 20:42:46
【问题描述】:

我是 MERN 和 stackoverflow 的新手。 我想从 mongodb 数据库中获取所有数据。但是当我通过邮递员尝试时,它显示以下错误。

这是我的 Model.js 文件 Model.js

const mongoose = require("mongoose");

const Schema = {
    name: {
        type: String,
        required: true
    },
    code: {
        type: String,
        required: true
    },
    passMark: {
        type: Number,
        required: true
    },
    lic: {
        type: String,
        required: true
    },
    subjects: [
        { 
            type: mongoose.Schema.Types.ObjectId, 
            required: false, 
            ref: 'Subjects' 
        }
    ]
};

const Model= mongoose.model("Model",Schema);

module.exports = Model;

这是我的 router.js 文件 Router.js

const Model= require("../models/Model");
const route = require("express").Router();

route.get("/", (req,res)=>{
    Model.find()
   .exec((err, items)=>{
        if(!err){
            return res.json({items: items})
        }
    })
});

有人可以帮我解决这个问题。

【问题讨论】:

  • 你有没有在你的服务器上添加中间件来解析json?你加app.use(express.json())了吗?或类似的东西?否则,你就有麻烦了。
  • 除非我记错了,express.json() 用于解析传入的req.body。这里是空的,OP没有使用它。
  • @isaacsan123 我用过。
  • @JeremyThille 我用过

标签: javascript node.js rest express backend


【解决方案1】:

这是一个盲目的猜测,但我相信错误的发生是因为Model.find() 不返回 JSON 数据。它返回一个 Mongoose 对象的集合,以及像 .save() 这样的额外方法。如果你想要 Mongo 中的纯 JSON,请添加 .lean()

route.get("/", (req,res)=>{
    Model.find().lean()
   .exec((err, items)=>{
        if(!err){
            return res.json({items: items})
        }
    })
});

专业提示,使用 async/await 语法也是一样的:

route.get("/", async (req,res)=>{
   try{
       const items = await Model.find().lean().exec(); // .exec() returns a true Promise
       res.json({items});
   } catch(err) {
      res.status(500).end(err)
   }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多