在使用EXPRESS + NODEJS + MONGODB + MONGOSKIN来快速搭建web应用的时候,读取数据失败。
在打开数据库连接,创建了一条数据的前提下,我是这样做的:
1:在app.js中数据连接
// Database
var mongo = require('mongoskin');
var db = mongo.db("mongodb://localhost:27017/learn3", {native_parser:true});
2:让数据库连接到http请求上
// Make our db accessible to our routerapp.use(function(req,res,next){
req.db = db;
next();
});
贴出app.js的代码如下:
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
// Database
var mongo = require('mongoskin');
var db = mongo.db("mongodb://localhost:27017/learn3", {native_parser:true});
var routes = require('./routes/index');
var users = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
app.use('/users', users);
// Make our db accessible to our router
app.use(function(req,res,next){
req.db = db;
next();
});
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
module.exports = app;
3:在.\routes\users.js 编辑如下:
var express = require('express');
var router = express.Router();
/**
* GET userlist.
*/
router.get('/userlist', function(req, res) {
var db = req.db;
db.collection('userlist').find().toArray(function(err, items) {
res.json(items);
})
// res.send('respond with a resource');
});
module.exports = router;
4:打开服务,npm start 后,访问http://localhost:3000/users/userlist,发现报错了。
错误提示是:Cannot call method 'collection' of undefined。
查看网络,发现这样的用法也是可以的,请各位路过的仁兄帮忙看看呗。
Sebabnya ditemui:
Saya meletakkan nilai req.db di bawah, saya rasa ia adalah kerana ia tidak disegerakan ke db semasa memanggil req.db, jadi ralat dilaporkan semasa memanggil koleksi nanti. Untuk alasan yang lebih mendalam, saya masih perlu meneroka. Apabila saya menulisnya, saya merasakan bahawa kedudukan atas dan bawah mungkin tidak penting. Jika ada yang dapat menjawabnya, tolong bantu saya, terima kasih.