我制作了这个节点js应用程序,然后我尝试使用邮递员,但每次我发出涉及mongodb的请求时,它都会继续加载。模型的函数find是代码停止的地方,永远不会调用回调。
app.js
var express = require("express"),
app = express(),
bodyParser = require('body-parser'),
methodOverride = require('method-override'),
mongoose = require('mongoose');
//Connection to DB
mongoose.connect('mongodb://localhost:27017/users', function(err, res) {
if(err) {
console.log('ERROR: connecting to Database. ' + err);
}
});
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(methodOverride());
var models = require('./models/user')(app, mongoose);
var userContoller = require('./controllers/user');
var router = express.Router();
router.get('/', function(req, res) {
console.log('GET');
res.send("Hello World!");
});
app.use(router);
var users = express.Router();
users.route('/users')
.get(userContoller.findAllUsers);
app.use('/api', users);
app.listen(3000, function() {
console.log("Node server running on http://localhost:3000");
});
模型/ user.js的
exports = module.exports = function(app, mongoose){
var userSchema = new mongoose.Schema({
userName: { type: String },
password: { type: Number }
});
mongoose.model('User', userSchema);
};
控制器/ user.js的
var mongoose = require('mongoose');
var User = mongoose.model('User');
//GET - Return all tvshows in the DB
exports.findAllUsers = function(req, res) {
console.log('llega');
User.find(function(err, users) {
if(err) res.send(500, err.message);
console.log('GET /users')
res.status(200).jsonp(users);
});
};
mongodb服务器是通过控制台启动的,但我不知道如何检查它。
谢谢!
编辑:
我让代码更容易测试和解决问题。 现在的代码就是这个,我没有得到与mongodb的连接。
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;
db.on('error', function() {
console.log('error');
});
db.once('open', function() {
console.log('connected');
});
我没有在控制台中输入错误或连接。
在mongod控制台中,我收到一些消息,说明已建立新连接。每次打开nodejs程序时都会发生这种情况。 感谢
答案 0 :(得分:1)
我认为问题在于您正在回拨mongoose.connect函数。在我的情况下,我做了:
mongoose.connect(url, options)
const db = mongoose.connection
db.on('error', function () { console.log('Cannot Connect to DB') })
db.once('open', function () { console.log('Mongoose Connected to DB') })
而不是:
users.route('/users').get(userContoller.findAllUsers);
您可以尝试:
users.get('/users', userController.findAllUsers);
我意识到你没有向你的控制者传递一个next
论点,如果你不通过,通常会抱怨。
编辑:我想我发现了错误。
当您使用.find
函数时,您需要传递2个参数。在你的情况下,因为你没有将回调作为第二个参数传递它永远不会被调用。
User.find({}, callback)
应该这样做。
答案 1 :(得分:0)
我发现了问题。
mongoose的版本比连接到我的mongodb版本所需的版本要早。只需通过npm更新即可。