使用Node.js Express发布JSON对象时发生MongoDB格式错误

我正在使JSON对象看起来像

var newSong = { 'name': 'Song', 'genre': 'Genre', 'percent': '100', 'lyrics': [ {"line": "1", "lyric": "first lyric"} ] } 

然后使用Express和Node.js来更新我的MongoDB

 //in global.js file $.ajax({ type: 'POST', data: newSong, url: '/songs/addsong', dataType: 'JSON' }).done(function( response ) { ...checking for errors... } }); //in songs.js (routes file) router.post('/addsong', function(req, res) { var db = req.db; db.collection('daisy').insert(req.body, function(err, result){ res.send( (err === null) ? { msg: '' } : { msg: err } ); }); 

这在向MongoDB发布内容的过程中起作用。

但是,发布的内容如下所示:

 { "_id" : ObjectId("54d6d8d12a5bed45055e6e1b"), "name" : "Song", "genre" : "Genre", "percent" : "100", "lyrics[0][line]" : "1", "lyrics[0][lyric]" : "first lyric" } 

而不是我需要它看起来如何:

 { "_id" : ObjectId("54d6d8d12a5bed45055e6e1b"), "name" : "Song", "genre" : "Genre", "percent" : "100", "lyrics" : [ {"line":1", "lyric": "first lyric"} ] } 

让我知道我在做什么错了!

您需要JSON.stringify newSong以便它将被编码为JSON正文。 您还需要声明正确的contentType以便服务知道将其解释为JSON。

 $.ajax({ type: 'POST', data: JSON.stringify(newSong), url: '/songs/addsong', contentType: 'application/json', dataType: 'JSON' }).done(function( response ) { ...checking for errors... }); 

为您的ajax调用使用以下内容:

 $.ajax({ type: 'POST', data: newSong, url: '/songs/addsong', contentType: "application/json; charset=utf-8", dataType: "json", }).done(function( response ) { ...checking for errors... } }); 

如果您尚未安装body-parser模块,请执行以下操作:

 npm install body-parser 

在实例化express时,在代码中添加以下代码行

 var bodyParser = require('body-parser') var app = express() // parse application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: false })) // parse application/json app.use(bodyParser.json())