【问题标题】:node js express mongoose api save operation not workingnode js express mongoose api保存操作不起作用
【发布时间】:2020-11-22 22:37:53
【问题描述】:

我正在使用 Mongoose 和 Express 创建我的第一个节点 js api。当我尝试发布数据时遇到一些问题,它不起作用。邮递员请求永远不会完成,并且数据不会被保存。请找到附加的代码并帮助我找出问题所在。另请注意,数据库连接已成功建立。

//Post.js

const mongoose = require("mongoose");

const PostSchema = mongoose.Schema({
  title: {
    type: "string",
    required: true,
  },
  description: {
    type: "string",
    required: true,
  },
  date: {
    type: "Date",
    default: Date.now,
  },
});

module.exports = mongoose.model("Posts", PostSchema);

// Posts.js  => Routes
const express = require("express");
const Post = require("../models/post");
const router = express.Router();

router.get("/", (req, res) => {
  res.send("Posts");
});

router.post("/", (req, res) => {
  try {
    console.log(req.body);

    const post = new Post({
      title: req.body.title,
      description: req.body.description,
    });

    post
      .save()
      .then((data) => res.json(data))
      .catch((err) => res.json(err));
  } catch (error) {
    console.log(error);
  }
});

module.exports = router;

// app.js
const express = require("express");
const app = express();
const mongoose = require("mongoose");
require("dotenv/config");
const bodyParser = require("body-parser");

//Import Routes
const postRoute = require("./routes/posts");

//Middlewares
app.use(bodyParser.json());

//Routes
app.use("/posts", postRoute);

// Connect to db
mongoose.connect(
  process.env.DB_CONNECTION,
  { useNewUrlParser: true, useUnifiedTopology: true },
  () => {
    console.log("connected to db !");
  }
);

app.listen(3000);

更新

数据库连接本身似乎有问题。下面是我的连接字符串。我处理了错误的猫鼬连接,我得到了屏幕截图中显示的错误。

mongodb://<dbuser>:<dbpassword>@ds023550.mlab.com:23550/roofapp

【问题讨论】:

    标签: node.js rest express mongoose


    【解决方案1】:

    刚刚在此处粘贴了您的代码,并且对于发布和获取都可以正常工作。

    你能完成 GET 请求吗?

    您的项目结构如何?

    确保您正确导入文件。

    从您注释掉的文件名中,您可以看到带有大写字母的 Post.js,并且您正在导入帖子。导入中似乎有问题。

    这是基于您发布的代码的有效解决方案。

    文件:app.js - Post.js - Router.js

    app.js:

    const express = require("express");
    const app = express();
    const mongoose = require("mongoose");
    // require("dotenv/config");
    const bodyParser = require("body-parser");
    
    //Import Routes
    const postRoute = require("./Router");
    
    //Middlewares
    app.use(bodyParser.json());
    
    //Routes
    app.use("/posts", postRoute);
    
    // Connect to db
    mongoose.connect("mongodb://localhost/test",
      { useNewUrlParser: true, useUnifiedTopology: true },
      () => {
        console.log("connected to db !");
      }
    );
    
    app.listen(3000);
    

    Post.js

    const mongoose = require("mongoose");
    
    const PostSchema = mongoose.Schema({
      title: {
        type: "string",
        required: true,
      },
      description: {
        type: "string",
        required: true,
      },
      date: {
        type: "Date",
        default: Date.now,
      },
    });
    
    module.exports = mongoose.model("Posts", PostSchema);
    

    Router.js

    const express = require("express");
    const Post = require("./Post");
    const router = express.Router();
    
    router.get("/", (req, res) => {
      res.send("Posts");
    });
    
    router.post("/", (req, res) => {
      try {
        console.log(req.body);
    
        const post = new Post({
          title: req.body.title,
          description: req.body.description,
        });
    
        post
          .save()
          .then((data) => res.json(data))
          .catch((err) => res.json(err));
      } catch (error) {
        console.log(error);
      }
    });
    
    module.exports = router;
    

    【讨论】:

    • 我认为导入很好,因为我的 post 方法正在被击中,我可以看到 console.log(req.body); 的输出但是在保存我不太确定的数据时出现了问题。
    • 嗯...所以问题实际上是连接到 mongodb 而不是 node express 等。您确定roofapp 数据库存在吗?同样从您发布的 uri 中,您没有传递 dbuser 和 db 密码。确保将其更改为实际值:)。
    • 是的,我已经这样做了。现在我得到了不同的错误。试图解决这个问题。很快就会在这里发布。
    猜你喜欢
    • 2017-06-10
    • 1970-01-01
    • 2019-08-24
    • 2021-05-26
    • 2016-06-25
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    相关资源
    最近更新 更多