2016-11-30 18 views
0

yall、私のノードとMongoDBアプリケーションについて助けが必要です。ノードを使用してmongodbコレクションから特定のデータを取得する

私はMongoDBデータベースを持っており、express.jsでnode.jsを使ってデータを取得しています。私はアプリケーションでデータをうまくフェッチし、ブラウザにも送ることができます。しかし、私が持っているテンプレートをレンダリングしたい(下記参照)。

このモデル

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

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

mongoose.model('emaildata', usersSchema); 

<!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 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' ....)によってスクリプトを半分ほど試してみます。 2.オブジェクトを正しくインポートしていないので、データを使ってテンプレートをレンダリングしようとすると、何もありません。

おかげでたくさん!

+0

を取得します。 findOneを使用していないので、あなたのemaildata結果は配列でなければなりませんか? – Simon

答えて

0

まず、res.sendは、私はあなたのテンプレートファイルの名前は、「電子メール」であることを前提としています。

をお使いのテンプレートファイルを使用するので、res.render('email', {information : emaildata}) を使用して、テンプレートではありませんファイルをレンダリングするには{{information.name}}と{{information.email}}を使用してください(私はhjsを使用していないので、構文エラーがあるかもしれません)。

+0

ねえ、コメントありがとうございました。それはちょっと働いています。私がこのres.render( 'email'、{title: 'Emails'、information:emaildata})を送るとき、このテンプレートに

こんにちは私の名前は{{情報}}、{{情報}}歳です!

それは私の全Jsonオブジェクトを私のデータベースから送ります。だから、フェッチと送信は素晴らしいです。唯一の問題は、jsonオブジェクトの内部から名前や電子メールを指定できることです。 –

+0

前のコメントに追加すると、文字が不足しました。私が試してみると、私のテンプレートにinformation.emailやinformation.nameを入れても、私のWebページには何も送られません。理由は分かりません。助けて! –

+0

@YisroelArnson 'hjs'は維持されておらず、express 4.xをサポートしていない可能性がありますので、[ejs](https://www.npmjs.com/package/ejs)を使用してもう一度お試しください。 – solarhell

0

まず、

インポートモーダルスキーマ

すでにデータベース内のいくつかのデータを持っている場合はその後、それはまたあなたのモーダル

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

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

mongoose.model('emaildata', usersSchema); 

にこれを更新することにより、フェッチを取得

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

次に、すべてのデータを取得します。

最初にルータを宣言します

var router = express.Router(); 

私は前にマングースを使用することはありませんが、私はその問題はあなたがemaildataを取得する方法から来る推測データ

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

      res.json(mydataSchema); 
     }); 
    }); 
関連する問題