【问题标题】:Mongoose not creating document for a new collectionMongoose 不为新集合创建文档
【发布时间】:2019-05-14 01:00:36
【问题描述】:

当我在 MEAN 堆栈应用程序(使用 Angular 7、Express 4、Mongoose 4.4.5)的表单中执行提交按钮时,我正在尝试为集合创建一个新文档。事实证明,这个集合我的 mongodb 数据库中尚不存在。我已经浏览了关于类似问题的几个关于 stackoverflow 的回复,并相应地修改了我的代码,但没有运气。当我单击应该导致创建新文档的提交按钮时,mongod 甚至不会记录任何活动,即使我已经与 mongodb 建立了开放连接。代码如下:

表达 app.js 代码:

var mongoose = require('mongoose');
var contactUsRouter = require(path.join(__dirname, 'routes', 'contactUs'));
var app = express();

//Connecting to MongoDB
var mongoose_uri = process.env.MONGOOSE_URI || "mongodb://ratingsville:15Rville1904@localhost:27017/databank?authSource=admin";
mongoose.set('debug', true);
mongoose.connect(mongoose_uri);
//MongoDB successful connection
mongoose.connection.on('connected', ()=>{
  console.log('MongoDB connected at port 27017');
});
//MongoDB connection error
mongoose.connection.on('error', (err)=>{
  console.log(err);
})

app.use('/api/contactus', contactUsRouter);

module.exports = app;

contact_us_message.js(定义新架构和模型):

"use strict";

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var contactUsMessageSchema = new Schema({
  subject: {type: String},
  message: {type: String, required: true},
  senderEmail: {type: String, required: true},
  dateSent:{type: Date, default: Date.now}
});

var contactUsMessage = mongoose.model('contactUsMessage', contactUsMessageSchema);
module.exports = contactUsMessage;

contactUs.js(路由器):

"use strict";

var express = require('express');
var router = express.Router();
var contactUsMessage = require('../models/contact_us_message');


router.route('/')
    .get(function(req,res,next){
      res.send(req)
    })
    .post(function(req,res,next){
      console.log("Req body: ", req.body);
      contactUsMessage.create({
        subject: req.subject,
        message: req.message,
        senderEmail: req.senderEmail
      }, function(err){
        if (err) {return (err)}
        else {console.log('Successful')};
      });
      res.send({result: 'hello'});
    });


module.exports = router;

当我在 Angular 应用程序中执行导致 request.post 调用的提交按钮时,我希望快速路由器执行调用并在集合 contactUsMessage 中创建一个新文档,并创建一个名为 contactUsmessage 的新集合(如果一个尚不存在)。这两种情况都不会发生。路由器文件(contactUs.js)中的“contactUsMessage.create”命令有什么问题?另外,为什么我的 mongod 日志(如下所示)每隔几秒就不断添加另一个连接?那是件好事儿吗?如果没有,如何限制?

ng 日志显示:[HPM] POST /api/contactus -> http://localhost:8085

mongod日志显示:

2019-05-12T17:43:05.774-0400 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:53801 #14 (14 connections now open)
2019-05-12T17:43:05.777-0400 I NETWORK  [conn14] received client metadata from 127.0.0.1:53801 conn14: { application: { name: "MongoDB Shell" }, driver: { name: "MongoDB Internal Client", version: "3.4.3-10-g865d2fb" }, os: { type: "Windows", name: "Microsoft Windows 8", architecture: "x86_64", version: "6.2 (build 9200)" } }
2019-05-12T17:43:05.822-0400 I ACCESS   [conn14] Successfully authenticated as principal ratingsville on admin

npm 日志显示:POST /api/contactus 200 8.930 ms - 18

【问题讨论】:

    标签: express mongoose


    【解决方案1】:

    我的问题背后的问题在于在 mongoose create 命令中使用了“req”。它应该是“req.body.[parameter]”而不是“req.[parameter]”,它本身具有未定义的值,因为参数在“req.body”中,而不是直接在“req”中。 contactUs.js 的代码已修改如下,运行良好。

    router.route('/')
        .get(function(req,res,next){
          res.send(req)
        })
        .post(function(req,res,next){
          console.log("Req body: ", req.body);
          contactUsMessage.create({
            subject: req.body.subject,
            message: req.body.message,
            senderEmail: req.body.senderEmail
          }, function(err){
            if (err) {return (err)}
            else {console.log('Successful')};
          });
          res.send({result: 'hello'});
        });
    

    或者,我们可以使用以下方法:

    contactUsMessage.create(req.body,
        function(err){
            if (err) {return (err)}
            else {console.log('Successful')};
          });
    

    “req.body”替换的地方:

    {subject: req.body.subject,
    message: req.body.message,
    senderEmail: req.body.message}
    

    【讨论】:

      猜你喜欢
      • 2015-10-13
      • 2019-10-05
      • 2022-01-07
      • 2021-10-25
      • 2021-05-29
      • 2016-04-30
      • 2020-11-13
      • 2013-03-02
      • 2017-03-13
      相关资源
      最近更新 更多