2016-09-09 52 views
0

我是Mean stack的初學者我正在開發一個使用express從mongodb獲取所有記錄的API。但我無法從數據庫中獲取所有記錄。我不圖什麼,我做錯了,我這樣做如下:使用express和mongoskin驅動程序從mongoDB獲取所有記錄的API

這是我主要的應用程序(server.js)

require('rootpath')(); 
 
var express = require('express'); 
 
var app = express(); 
 
var session = require('express-session'); 
 
var bodyParser = require('body-parser'); 
 
var expressJwt = require('express-jwt'); 
 
var config = require('config.json'); 
 

 
app.set('view engine', 'ejs'); 
 
app.set('views', __dirname + '/views'); 
 
app.use(bodyParser.urlencoded({ 
 
    extended: false 
 
})); 
 
app.use(bodyParser.json()); 
 
app.use(session({ 
 
    secret: config.secret, 
 
    resave: false, 
 
    saveUninitialized: true 
 
})); 
 

 
// use JWT auth to secure the api 
 
app.use('/api', expressJwt({ 
 
    secret: config.secret 
 
}).unless({ 
 
    path: ['/api/users/authenticate', '/api/users/register'] 
 
})); 
 

 
// routes 
 
app.use('/', require('./controllers/login.controller')); 
 
app.use('/register', require('./controllers/register.controller')); 
 
app.use('/app', require('./controllers/app.controller')); 
 
app.use('/api/users', require('./controllers/api/users.controller')); 
 

 
/*// make '/app' default route 
 
app.get('/', function (req, res) { 
 
    return res.redirect('/app'); 
 
});*/ 
 

 
// start server 
 
var server = app.listen(3000, function() { 
 
    console.log('Server listening at http://' + server.address().address + ':' + server.address().port); 
 
});

這是我的user.controller.js用戶會作出請求給API http://localhost:3000/api/users/userList

var express = require('express'); 
var router = express.Router(); 
var userService = require('services/user.service'); 

router.get('/userList', getUserList); 

module.exports = router; 

function getUserList(req, res) { 
    userService.userList() 
    .then(function(users) { 
     if (users) { 
     res.send(users); 
     } else { 
     res.sendStatus(404); 
     } 
    }) 
    .catch(function(err) { 
     res.status(400).send(err); 
    }); 
} 

這是我的user.service.js我正在查詢數據庫以使用mongoskin驅動程序獲取所有記錄。

var Q = require('q'); 
var mongo = require('mongoskin'); 
var db = mongo.db("mongodb://localhost:27017/EmployeeForm", { 
    native_parser: true 
}); 
db.bind('users'); 

var service = {}; 

service.userList = userList; 

module.exports = service; 

function userList() { 
    var deferred = q.defer(); 

    db.users.find(function(err, users) { 
    if (err) deferred.reject(err.name + ': ' + err.message); 

    }); 

    return deferred.promise; 
} 
+0

如果您轉到http:// localhost:3000/userList,會發生什麼情況?你沒有route api/userList/userList ... –

+0

如果我去localhost:3000/userList它給出不能獲取/ userList,沒有問題的請求我不能寫特定的功能在快速取得所有記錄來自mongo db數據庫。 –

+0

嗯..可以顯示主應用程序,在其中運行快速應用程序並啓用所有路線。 –

回答

1

所以,我認爲這是找到問題。

默認情況下,MongoDB的find方法返回遊標。 https://docs.mongodb.com/manual/reference/method/db.collection.find/

https://github.com/kissjs/node-mongoskin他們使用方法指定者這將改變光標移到對象的數組這樣 db.find.toArray(callback)

因此,嘗試這樣的用戶列表()

function userList() { 
    var deferred = q.defer(); 

    db.users.find({}).toArray(function(err,docs){ 
    err ? deferred.reject(err) : deferred.resolve(docs); 
    }); 

    return deferred.promise; 
} 

希望這有助於。

+0

我明白你在user.service.js做了什麼,但用戶呢? .controller.js如何處理將返回的用戶列表。我無法測試是否從數據庫檢索記錄 –

+0

那麼如果在查詢您的承諾時會出現錯誤就會拒絕,並且您將在控制器中捕獲該記錄。如果一切都會好的,您將得到來自toArray方法和res.send(用戶) - >的用戶數組將會將該數組返回到結尾。所以如果數組將是空的或類似的東西只是查詢問題。 –

相關問題