この単純なNode.js Express APIを作成すると、奇妙な問題が発生しました。 モデルを作成し、データを挿入してからMongoDBに保存します。しかし、記録は決して保存されませんが、私もエラーはありません。私はMongoDBが実行されているかどうか、またノードエラーのsyslogとMongoDBエラーのmongod.logと私自身のWilsonのdebug.logファイルをチェックしました。すべてエラーを含まない。Node.jsエラーなしでMongooseモデルが保存されない
私はAPIをテストするためにpostmanを使用し、毎回レスポンスを取得します。データがMongoDBに保存されないだけです(挿入されたレコードを調べるためにdb.collection.find()でmongoコンソールを使用しました)。
これはなぜ起こっているのでしょうか?
私のコード:
api.js
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var http = require('http');
var https = require('https');
var fs = require('fs');
var winston = require('winston');
// Configure logging using Winston
winston.add(winston.transports.File, { filename: '/home/app/api/debug.log' });
winston.level = 'debug';
// Request body parser
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
// Enable https
var privateKey = fs.readFileSync('path to private key');
var certificate = fs.readFileSync('path to cert file');
var credentials = {
key: privateKey,
cert: certificate
};
// ROUTERS
var router = express.Router();
var speciesRouter = require('./app/routes/speciesRouter');
router.use('/species', speciesRouter);
// Routes prefix
app.use('/api/v1', router);
// SERVER STARTUP
http.createServer(app).listen(3000);
https.createServer(credentials, app).listen(3001);
speciesRouter.js
var express = require('express');
var mongoose = require('mongoose');
var router = express.Router();
var Sighting = require('../models/sighting');
var winston = require('winston');
// Database connection
var dbName = 'dbname';
mongoose.connect('mongodb://localhost:27017/' + dbName);
var db = mongoose.connection;
db.on('error', function(err){
winston.log('debug', err);
});
router.route('/')
.post(function(req, res) {
var sighting = new Sighting();
sighting.user_key = req.body.user_key;
sighting.expertise = req.body.expertise;
sighting.phone_location = req.body.phone_location;
sighting.record_time = req.body.record_time;
sighting.audio_file_location = '/var/data/tjirp1244123.wav';
sighting.probable_species = [{species_name:'Bosaap', percentage:100}];
var error = '';
winston.log('debug', 'test');
// This does not get execute I suspect..
sighting.save(function(err) {
winston.log('debug', 'save');
if (err) {
winston.log('debug', err);
error = err;
}
});
res.json({
probable_species: probable_species,
expertise: req.body.expertise,
error: error
});
});
module.exports = router;
sighting.js(モデル)
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var SightingSchema = new Schema({
user_key: String,
expertise: Number,
phone_location: { lat: Number, lng: Number },
record_time: Number,
audio_file_location: String,
probable_species: [{ species_name: String, percentage: Number }]
});
module.exports = mongoose.model('Sighting', SightingSchema);
winston.log( 'debug'、 'save');これは何かを印刷しますか? –
これは私のカスタムログファイルに入れます。その行には到達しませんが、sighting.save()行の前に別のwinstonログを入れます。 –
db.calculations.find()とdb.sightings.count()をチェックしました。最初のものは空で、2番目のものは0を返しました。 –