2016-11-30 97 views
0

他說,我需要一些關於我的節點和MongoDB應用程序的幫助。使用節點從mongodb集合中獲取特定的數據

所以我有一個MongoDB數據庫,並使用express.js使用node.js獲取數據。我使用我的應用程序獲取數據,我甚至可以將它發送到我的瀏覽器。但我想渲染一個我有的模板(如下所示)。

<!DOCTYPE html> 
<html> 
    <head> 
    <title>{{ title }}</title> 
    <link rel='stylesheet' href='/stylesheets/style.css' /> 
    </head> 
    <body> 
    <h1>{{ title }}</h1> 
    <p>Hello my name is {{ name }}, and my email is {{ email }}</p> 
    </body> 
</html> 

在這種模式下

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var usersSchema = new Schema({ 
    name: String, 
    email: String 
}); 

mongoose.model('emaildata', usersSchema); 

但是當我嘗試這樣做與此腳本

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'); 
var mongoose = require('mongoose'); 
var fs = require('fs'); 
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', 'hjs'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(require('less-middleware')(path.join(__dirname, 'public'))); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use('/', routes); 
app.use('/users', users); 

// MongoDb Server 
mongoose.connect('mongodb://127.0.0.1/emailApp'); 

// Load all files in models folder. Importing models and schemas 
fs.readdirSync(__dirname + '/models').forEach(function(filename) { 
    if (~filename.indexOf('.js')) require(__dirname + '/models/' + filename) 
}); 

app.get('/data', function(req, res) { 
    mongoose.model('emaildata').find(function(err, emaildata) { 
    res.send(emaildata) 
    // res.render('email', { title: 'Emails', email: emaildata.email, name: emaildata.name }); 
    }); 
}); 




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

它不會呈現任何內容。我相信問題是1.我不使用正確的語法來標識對象中的特定數據,例如名稱或電子郵件。我試着在app.get('/ data'... ...的一半以下執行此操作。我沒有正確導入對象,因此當我嘗試使用數據呈現我的模板時,沒有什麼。

感謝一大堆!

+0

我以前從未使用貓鼬,但我想這問題來自您檢索emaildata的方式。既然你沒有使用findOne,你的emaildata結果應該是一個數組的權利? – Simon

回答

0

首先,res.send不會將您的模板文件。

我假設你的模板文件的名稱是「電子郵件」,所以用res.render('email', {information : emaildata}) 和模板文件,請使用{{information.name}}和{{information.email}}來渲染它們(我沒有使用hjs,所以可能會出現一些語法錯誤。)

+0

嘿,那裏,感謝您的評論。所以它有點作品,我即將發送這個res.render('email',{title:'Emails',information:emaildata});到這個模板

你好我的名字是{{information}},並且im {{information}}歲!

它從我的數據庫中發送給我整個json對象。所以抓取和發送很好。唯一的問題是,我可以從我的json對象內指定名稱或電子郵件。 –

+0

添加到以前的評論,用完字符。當我嘗試在我的模板中執行information.email或information.name時,沒有任何內容發送到我的網頁。不知道爲什麼。幫幫我! –

+0

@YisroelArnson'hjs' **不是**被維護,可能不支持express 4.x,我建議您使用[ejs](https://www.npmjs.com/package/ejs)並重試。 – solarhell

0

首先,

導入模態模式

var mydataSchema = require('.<directory>/<yourmodalname>'); 

然後,如果你已經在你的數據庫中的一些數據,得到的是同樣牽強通過更新到您的模態

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var usersSchema = new Schema({ 
    name: String, 
    email: String 
}, {collection : '<tableName>' }); 

mongoose.model('emaildata', usersSchema); 

這然後獲取所有數據:

首先聲明路由器

var router = express.Router(); 

獲取數據

router.route('/userData') 
.get(function(req, res) { 
     mydataSchema.find(function(err, mydataSchema) { 
      if (err) 
       res.send(err); 

      res.json(mydataSchema); 
     }); 
    });