【问题标题】:Trying to post on mongoDB using mongoose (NODE.JS)尝试使用 mongoose (NODE.JS) 在 mongoDB 上发帖
【发布时间】:2019-04-26 07:35:20
【问题描述】:

这是产品的模型,我有对象的猫鼬模式。

const mongoose = require('mongoose');
const productSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    name: String,
    price: Number
});
module.exports = mongoose.model('Product', productSchema);

这是我的 POST 方法。

const express = require("express");
const router = express.Router();
const mongoose = require("mongoose");

const Product = require("../models/product");


      router.post("/", (req, res, next) => {
          const product = new Product({
            _id: new mongoose.Types.ObjectId(),
            name: req.body.name,
            price: req.body.price
          });
          product
            .save()
            .then(result => {
              console.log(result);
              res.status(201).json({
                message: "Handling POST requests to /products",
                createdProduct: result
              });
            })
            .catch(err => {
              console.log(err);
              res.status(500).json({
                error: err
              });
            });
        });

问题如下: 每当我在 POSTMAN 上调用 POST 方法时,服务器从不响应,它会在 Visual Studio 代码上给出错误 500 并且服务器崩溃。 POSTMAN 中使用的 body 是正确的,并且与 mongoDB 的连接也是成功的。

服务器打印以下错误:

(node:3214) UnhandledPromiseRejectionWarning: MongoNetworkError: 首次连接时无法连接到服务器 [node-rest-shop-shard-00-00-pbcph.azure.mongodb.net:27017] [MongoNetworkError: connection 4 to node -rest-shop-shard-00-00-pbcph.azure.mongodb.net:27017 超时]

(node:3214) UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。 (拒绝编号:1)

(node:3214) [DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。

【问题讨论】:

  • 作为一般建议,POSTMAN 通常不是很可靠,您应该真正考虑开始使用 curl 来测试 Web 服务。如果你在 Windows 中,你可以使用 GitBash 或 LSW。
  • MongoNetworkError: failed to connect to server - 应用程序无法连接到您的 MongoDB 服务器。这是一个网络配置问题,与问题中的代码无关。未处理的 Promise 拒绝调用是因为您在调用 mongoose.connect() 时没有使用 .catch(),或者在带有 async/await 的 try..catch 块内调用。您应该修复该代码,但这里真正的问题是网络。
  • 尝试重启你的mongodb服务:sudo service mongod start

标签: node.js mongodb mongoose


【解决方案1】:

我认为你的问题可能是你没有导出路由器

   var express = require('express');

var Product = require('../models/product');

const router = express.Router();
const mongoose = require('mongoose');

router.post('/product', (req, res) => {

    const product = new Product({
        _id: new mongoose.Types.ObjectId(),
        name: req.body.name,
        price: req.body.price
      });
      product
        .save()
        .then(result => {
          console.log(result);
          res.status(201).json({
            message: "Handling POST requests to /products",
            createdProduct: result
          });
        })
        .catch(err => {
          console.log(err);
          res.status(500).json({
            error: err
          });
        });

});


module.exports = router;

试试这个代码,我在邮递员中测试它。

Post product

【讨论】:

  • 这不是问题。问题中有一条错误消息,它准确显示出了什么问题。与问题中的代码无关。
猜你喜欢
  • 2021-12-28
  • 2016-06-03
  • 2011-12-07
  • 1970-01-01
  • 2017-05-14
  • 2013-12-24
  • 2020-09-26
  • 2011-09-22
  • 2014-09-03
相关资源
最近更新 更多