【发布时间】:2018-10-25 01:19:04
【问题描述】:
我正在拼命尝试使用 mongoose 创建与 mongoDB 与 MEAN 堆栈的连接。 我的 MongoDB 实例 (mongod) 正在运行,我可以使用 mongo.exe 并通过插入一些文档对其进行测试,它运行良好。但是我在使用 mongoose 创建与 MongoDB 的连接时遇到问题,并且使用 .save() 方法插入文档也不起作用...... 我首先想尝试我的 POST 方法,创建一个函数并通过在 POSTMAN 中创建一些值来测试它。但是我的 MongoDB 数据库中没有插入任何文档..
这是我的 app.js 文件:
var express = require('express');
var app = express();
var bodyParser = require("body-parser");
var morgan = require("morgan");
//var routes = require('./routes');
//var cors = require('cors')
//configure app
app.use(morgan('dev')); //log requests to the console
//configure body parser
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
var port = process.env.PORT || 5000;
//DATABASE SETUP
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/DNZ'); //connect to uor datbaase
//Handle the connection event
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
console.log("DB connection alive");
});
//DNZ models live here
var FA = require('./models/DNZmodels/FA');
//ROUTES FOR OUR API
//=============================================================================
//create our router
var router = express.Router();
//middleware to use for all requests
router.use(function(req, res, next) {
// do logging
console.log('Something is happening.');
console.log('Today is:', Date())
next();
});
//test route to make sure everything is working (accessed at GET http://localhost:5000/DNZ/)
router.get('/', function(req, res) {
res.json({ message: 'Welcome to DNZ API!' });
});
//on routes that end in /FA
//----------------------------------------------------
router.route('/FA')
// create a FA (accessed at POST http://localhost:8080/DNZ/FA)
.post(function(req, res) {
//console.log(req.body);
//console.log(req.body.params);
//res.setHeader('Content-Type', 'application/json')
res.send(JSON.stringify(req.body));
/*
var timestamp = req.body.Timestamp;
var prognostizierterBetriebswert = req.body.PrognostizierterBetriebswert;
var posFlexPot = req.body.posFlexPot;
var negFlexPot = req.body.negFlexPot;
var leistungsuntergrenze = req.body.Leistungsuntergrenze;
var leistungsobergrenze = req.body.Leistungsobergrenze;
var posGesEnergie = req.body.posGesEnergie;
var negGesEnergie = req.body.negGesEnergie;
var preissignal = req.body.Preissignal;
var dummy1 = req.body.Dummy1;
var dummy2 = req.body.Dummy2;
var dummy3 = req.body.Dummy3;
*/
var fa = new FA();
fa.name = req.body.name;
console.log("Hier erscheint var fa:", fa);
//console.log(Dummy1);
//res.send(JSON.stringify(timestamp));
// create a new instance of the FA model
/*
var fa = new FA({
Timestamp: timestamp,
Leistungsuntergrenze: leistungsuntergrenze,
Leistungsobergrenze:leistungsobergrenze,
PrognostizierterBetriebswert :prognostizierterBetriebswert,
posFlexPot: posFlexPot,
negFlexPot:negFlexPot,
posGesEnergie: posGesEnergie,
negGesEnergie: negGesEnergie,
Preissignal:preissignal,
Dummy1: dummy1,
Dummy2: dummy2,
Dummy3: dummy3
})
*/
//SAVE the new instance
fa.save(function(err) {
if (err) {
console.log(err);
res.status(400);
res.send(err);
}
else {
console.log("debug");
res.status(200);
res.json({ message: 'FA created!' });
}
});
})
// get all the FAs (accessed at GET http://localhost:8080/DNZ/FA)
.get(function(req, res) {
FA.find(function(err, fas) {
if (err)
res.send(err);
res.json(fas);
});
});
//on routes that end in /FA/:FA_id
//----------------------------------------------------
router.route('/FA/:FA_id')
// get the bear with that id
.get(function(req, res) {
FA.findById(req.params.bear_id, function(err, fa) {
if (err)
res.send(err);
res.json(fa);
});
})
// update the bear with this id
.put(function(req, res) {
FA.findById(req.params.FA_id, function(err, fa) {
if (err)
res.send(fa);
//bear.name = req.body.name;
/*
FA.save(function(err) {
if (err)
res.send(err);
res.json({ message: 'FA updated!' });
});
*/
});
})
/*
// delete the bear with this id
.delete(function(req, res) {
FA.remove({
_id: req.params.bear_id
}, function(err, FA) {
if (err)
res.send(err);
res.json({ message: 'Successfully deleted' });
});
});
*/
//REGISTER OUR ROUTES -------------------------------
app.use('/DNZ', router);
//START THE SERVER
//=============================================================================
app.listen(port);
console.log('Magic happens on port ' + port);
/*
// set static directories
app.use(express.static('./dist'));
app.use(cors());
// Define Routes
var index = require('./routes/index');
var users = require('./routes/users');
//Set up routes
routes.init(app)
//run
app.listen(port);*/
console.log('Server started, Listening on port ', port);
我使用了熊教程中的“模板”: https://scotch.io/tutorials/build-a-restful-api-using-node-and-express-4 这里的问题已经是,没有消息:“DB connection alive”。但是,在熊教程(我在这里使用的代码)中,建立了数据库连接,我可以在数据库中插入熊文档。但是,在这里它不起作用...
这是我来自 FA.js 的 FA Schema 模型:
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var FASchema = new Schema({
Timestamp: Date,
PrognostizierterBetriebswert: Number,
posFlexPot: Number,
negFlexPot: Number,
Leistungsuntergrenze: Number,
Leistungsobergrenze: Number,
posGesEnergie: Number,
negGesEnergie: Number,
Preissignal: Number,
Dummy1: Schema.Types.Mixed,
Dummy2: Schema.Types.Mixed,
Dummy3: Schema.Types.Mixed
//same: Dummy: {}
});
//var FASchema = new Schema({name: String});
module.exports = mongoose.model("FA", FASchema, 'FA');
console.log("FA wird ausgeführt!");
有人知道为什么没有创建数据库连接吗?
【问题讨论】:
-
大部分教程都是旧的。你的节点版本是什么。
node --version?你真的不应该再以这种方式发出connect(),但首先让我们看看你安装了哪个版本的节点。现在实际部署能够在 v8.x 上运行应该很常见。 -
在与 db 建立连接之前尝试移动
var FA = require('./models/DNZmodels/FA'); -
我的节点版本是 8.11.1。但我想我现在自己发现了。在我的 package.json 中,我有 express 4.0 和 mongoose 3.6 的旧版本: { "name": "nodejs_backend_server", "main": "server.js", "dependencies": { "@angular/cli": "^ 1.7.4”、“@angular/platform-server”:“^5.2.9”、“body-parser”:“~1.0.1”、“cors”:“^2.8.4”、“express”:“ ~4.8.0", "mongoose": "~3.6.13", "request": "^2.83.0", "morgan": "~1.9.0" } } 我更新了 "express": "~4. xx”和“mongoose”:“~4.xx”,db 连接现在可以正常工作了。
-
但我有一个新问题:POST /DNZ/FA 200 5.497 ms - 23 (node:19164) DeprecationWarning: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library相反:mongoosejs.com/docs/promises.html debug events.js:183 throw er; // 未处理的“错误”事件 ^ 错误:发送后无法设置标头。
-
我看不到任何错误日志,请粘贴那些