2016-02-19 3 views
0

Мне нужен API для вставки данных с android в mongodb, я следую this, код может выполняться, не имеет ошибки, и я использую POSTMAN, пытаюсь опубликовать некоторые данные, он всегда говорит, что не мог получить любой ответ, похоже, имеет ошибку, соединяющую 192.168.1.105:3000/songs , но я могу использовать find all api и findByID. Это заняло у меня несколько часов, пожалуйста, помогите, так угнетают :(Mongodb Вставить данные API no respone

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:[email protected]: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]); 

} 
}); 
}); 
}; 
+0

Можете ли вы исправить отступы в коде? Это очень трудно читать. – JohnnyHK

+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, поэтому измените его снова на тот, который вы указали.

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);

Надеется, что это помогает.

+0

it WORKS! Боже мой, ты сделал мой день! –

Смежные вопросы