Mongodb插入数据API没有响应

时间:2016-02-19 18:29:15

标签: node.js mongodb

我需要一个API来将数据从android插入到mongodb,我按照this,代码可以运行,没有错误,我使用POSTMAN尝试发布一些数据,它总是说不能得到任何反响,似乎连接到192.168.1.105:3000/songs有错误 但我可以使用find all api和findByID。 这花了我几个小时,请帮忙,所以压抑:(

app.js

var express = require('express');
var bodyParser = require('body-parser');
var app = express();

songs = require('./routes/route');
var jsonParser = bodyParser.json();

app.post('/songs', jsonParser, function (req, res) {
if (!req.body) return res.sendStatus(400);


app.get('/', function (req, res) {
res.send('Hello World!');
});

app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});


app.get('/songs',songs.findAll);
app.get('/findById/:id',songs.findById);
app.get('/songs',songs.addSong);

路线

var mongoose = require('mongoose');
var mongo = require('mongodb');
var uri = "mongodb://XXXX:XXXX@ds061365.mongolab.com:61365/aweitest";
mongoose.connect(uri);
// we're connected!
var db = mongoose.connection.db;
var BSON = require('bson').BSONPure;
var body = require('body-parser');


db.on('error', console.error.bind(console, 'connection errrrrrrrror:'));
db.once('open', function() {
console.log("mongodb is connected!!");
});

exports.findAll = function(req, res) {
db.collection('songs',function(err, collection) {
collection.find().toArray(function(err, items) {
  res.send(items);
  });
  });
  };


exports.findById = function(req, res) {
var id = req.params.id;
console.log('Retrieving song: ' + id);
db.collection('songs', function(err, collection)
collection.findOne({'_id':new BSON.ObjectID(id)}, function(err, item) {
  res.send(item);
 });
 });
 };


exports.addSong = function(req, res) {
var song = req.query;
 console.log('Adding song: ' + JSON.stringify(song));
db.collection('songs', function(err, collection) {
collection.insert(song, {safe:true}, function(err, result) {
{console.log('Success: ' + JSON.stringify(result[0]));
res.send(result[0]);

}
});
});
};

1 个答案:

答案 0 :(得分:1)

好的,所以我在代码中更改了一些内容。我在app.js文件中成功获取了请求正文。看看代码。

<强> route.js

var mongoose = require('mongoose');
var mongo = require('mongodb');
var uri = "mongodb://localhost:27017/test";
mongoose.connect(uri);
// we're connected!
var db = mongoose.connection.db;
var BSON = require('bson').BSONPure;
var body = require('body-parser');
db.on('error', console.error.bind(console, 'connection errrrrrrrror:'));
//db = mongoose.connection.db;
db.once('open', function() {
    console.log("mongodb is connected!!");
});

exports.addSong = function(req, res) {
 var song = req.body;
 console.log('Adding song: ' + JSON.stringify(song));
 db.collection('songs', function(err, collection) {
     collection.insert(song, {safe:true}, function(err, result) {
      if (err) {
        res.send({'error':'An error has occurred'});
      } else {
        console.log('Success: ' + JSON.stringify(result[0]));
        res.send(result[0]);
      }
    });
});
}

请注意,我已将URI更改为localhost,因此请将其再次更改为您指定的URI。

<强> app.js

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
songs = require('./routes/route');

app.post('/songs', function(req, res) {
    console.log("Request.Body : " + JSON.stringify(req.body));
    if (!req.body) return res.sendStatus(400);
    songs.addSong(req, res);
});

app.get('/', function (req, res) {
    res.send('Hello World!');
});

app.listen(3000, function () {
    console.log('Example app listening on port 3000!');
});

app.get('/songs',songs.addSong);

因为您唯一的问题是您无法获得请求正文。您将能够使用此代码获取它。

此外,由于您的app.get('/songs',songs.addSong);类型为 GET ,因此您无法通过它发送 POST数据。所以把它改成

app.post('/songs',songs.addSong);

希望这有帮助。