Мангуст не создает документ для новой коллекции - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь создать новый документ для коллекции, когда я выполняю кнопку «Отправить» в форме в моем приложении стека 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;

Когда я выполняю кнопку отправки, которая приводит к вызову request.post в угловом приложении, я ожидаю, что экспресс-маршрутизатор выполнит вызов и создаст новый документ в коллекции contactUsMessage, а также создаст новую коллекцию с именем contactUsmessage ( если он еще не существует). Ничего из этого не происходит. Что не так с командой «contactUsMessage.create» в файле маршрутизатора (contactUs.js)? Кроме того, почему мой журнал mongod (показанный ниже) продолжает добавлять другое соединение каждые несколько секунд? Это хорошо? Если нет, то как его ограничить?

ng показывает: [HPM] POST /api/contactus -> http://localhost:8085

Mongod Log показывает:

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

1 Ответ

0 голосов
/ 13 мая 2019

Проблема, стоящая за моим вопросом, связана с использованием «req» в команде mongoose create.Это должен был быть «req.body. [Параметр]» вместо «req. [Параметр]», который сам по себе имеет неопределенное значение, потому что параметры находятся внутри «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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...