-1
所以首先,我检查了相关的question,但由于我没有使用相同的中间件,我认为这对我没有帮助。我有一个常规表单,并且它可以顺利通过req.body,并且可以打印所有表单值。然而问题是当我尝试创建一个新对象时,因为当我打印它时,它没有我分配的正确字段......?其次,当我尝试保存它时,当我通过终端检查时,它不会显示在Db中。我已经成功地运行了Mongod并连接到了正确的Db和集合,所以我很困惑。任何帮助将不胜感激!Node.JS - Mongoose不会将数据保存到MongoDB并且Object不能正确获取信息?
下面是相关代码
App.js:
var express = require('express');
var app = express();
var db = require('./db.js');
var path = require('path');
var bodyParser = require('body-parser');
var handlebars = require('hbs');
var mongoose = require('mongoose');
var museumObj = mongoose.model('MuseumObject');
//For Images
var fs = require('fs');
var multer = require('multer');
//Saves to memory storage
var upload = multer({ storage: multer.memoryStorage({}) });
//Port setting
app.set('port', (process.env.PORT || 5000));
app.use(express.static(__dirname + '/public'));
app.set('view engine', 'hbs');
app.set('views', path.join(__dirname, 'views'));
//app.use(bodyParser.json());
//app.use(bodyParser.urlencoded({ extended: false }));
app.get('/', function(req, res) {
res.render('index');
});
app.get('/AdvancedSearch', function(req, res) {
res.render('AdvancedSearch');
});
app.get('/AskUs', function(req, res) {
res.render('AskUs');
});
app.get('/Themes', function(req, res) {
res.render('Themes');
});
app.get('/AddObj', function(req, res) {
res.render('AddObj');
});
app.post('/AddObj',upload.single('pic'),function(req,res){
console.log("here is the req.body");
console.log(req.body);
var base64 = req.file.buffer.toString('base64');
var dim='';
if(req.body.length && req.body.width && req.body.height){
dim = req.body.req.body.length +" x "+req.body.width+" x "+req.body.height
}
var newObj = new museumObj({
accessionNum: req.body.accession,
maker: req.body.maker,
manufacturer: req.body.manufacturer,
title: req.body.title,
date: req.body.date,
medium: req.body.medium,
dimesions: dim,
marks: req.body.marks,
description: req.body.description,
pic: base64,
});
console.log('here is the new object before calling the save function');
console.log(newObj);
newObj.save(function(err,item, count){
if (err){
console.log("there is an error");
console.log(err);
}
else{
console.log('here is the "successfully" saved item');
console.log(item);
//res.redirect('/');
}
});
});
app.listen(app.get('port'), function() {
console.log('Node app is running on port', app.get('port'));
});
Db.js:
var mongoose = require('mongoose');
var URLSlugs = require('mongoose-url-slugs');
var MuseumObject = new mongoose.Schema({
accessionNum: String,
maker: {String, default: ''},
manufacturer: {String, default: ''},
title: String,
date: {String, default: ''},
medium: {String, default: ''},
dimensions: {String, default: ''},
marks: {String, default: ''},
description: {String, default: ''},
pic: {String, default: ''}
});
MuseumObject.plugin(URLSlugs('title'));
mongoose.model('MuseumObject', MuseumObject);
// is the environment variable, NODE_ENV, set to PRODUCTION?
if (process.env.NODE_ENV == 'PRODUCTION') {
console.log("in production");
// if we're in PRODUCTION mode, then read the configration from a file
// use blocking file io to do this...
var fs = require('fs');
var path = require('path');
var fn = path.join(__dirname, 'config.json');
var data = fs.readFileSync(fn);
// our configuration file will be in json, so parse it and set the
// conenction string appropriately!
var conf = JSON.parse(data);
var dbconf = conf.dbconf;
}
else {
// if we're not in PRODUCTION mode, then use
dbconf = 'mongodb://localhost/BKMuseum';
}
mongoose.connect(dbconf);
HTML文件:
<h1>Add an Object to the Collection<h1>
<h3>
<form method="POST" action="AddObj" id="AddObj" enctype='multipart/form-data'>
*Accession #: <input type="text" name = "accession" value ="" required>
<BR>
Maker/Designer/Artist: <input type="text" name = "maker" value ="">
<BR>
Manufacturer: <input type="text" name = "manufacturer" value ="" >
<BR>
*Title: <input type="text" name = "title" value ="" required >
<BR>
{{!-- Dates can be in string format: ca. 1930 vs. 1932-1934--}}
*Date : <input type="text" name="date" value="" required>
<BR>
*Medium: <input type="text" name="medium" value="" required>
<BR>
<div>
Dimensions:
<blockquote>
<input type="number" name="length" form="AddObj"> X <input type="number" name="width" form="AddObj"> X <input type="number" name="height" form="AddObj">
</blockquote>
</div>
Marks: <input type="text" name="marks" value="">
<div> Description
<BR>
<textarea name="description" form="AddObj" cols='50' style="resize:none; font-size:16px;"></textarea>
</div>
<br>
<div>
Image Upload
<BR>
<input type="file" name="pic" accept="image/*" form="AddObj" required>
</div>
<br>
<input type="submit" value="Submit" form="AddObj">
</form>
</3>
<p>
<a href="/">Go Back to Research Center's Home Page </a href>
</p>
下面是相关输出
Console output
- 蒙戈控制台输出:
使用BKMuseum
切换到DB BKMuseum
分贝。 BKMuseum.count()
db.BKMuseum.find({})
我想一旦他注册另一个文件中的模型。他可以通过'var museumObj = mongoose.model('MuseumObject')来访问它;',对吧? – Tolsee
@Tolsee是的,但是他在app.js中创建模态时没有使用该模型。他在Db.js中创建了模型,但没有导出它。因此,无论是导出该模型还是在app.js中创建新模型作为模态对象有不同的范围和refarance –
我不认为是这样,他已经注册了一个模型,我认为这是从猫鼬访问,如果你想使用一个单一的连接。 – Tolsee