当我在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调用时,我希望快递路由器执行该调用并在collectioncontactUsMessage集合中创建一个新文档,以及创建一个名为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
答案 0 :(得分:0)
我的问题背后的问题在于在猫鼬创建命令中使用“ 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}