使用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())