2016-09-07 13 views
0

私は現在、次の問題を抱えています: mongoDBからデータを取得できず、クライアント側または別のルート上に表示できません。私はいくつかの試みを使用しました:フォーム入力とpugテンプレートレンダラー経由でMongodbからデータを取得

app.get('/output', function(req, res){ 
    Users.find(function (err, users){ 
    res.render('help', {users: users}); 
    }); 
}); 

しかし、これは「ユーザーが定義されていません」で終わります。 mongoシェルを使用して 'show collections'を照会すると、フォーム入力のデータで 'users'コレクションが見つかります。

以下のコードに基づいてデータを取得し、#{users.firstName}のように 'index.pug'に表示する方法を誰かに教えていただければ幸いです。

App.jsコード:

var express = require('express'); 
var app = express(); 
var router = express.Router(); 
var mongoose = require('mongoose'); 
var bodyParser = require('body-parser'); 
var methodOverride = require('method-override'); 


app.get('/', function (req, res) { 
    res.render('index', function(err, html) { 
    res.send(html); 
    }); 
}); 

app.set('view engine', 'pug'); 
app.set('views', __dirname + '/views'); 

app.use(bodyParser.urlencoded({ extended: false })); 
app.use(bodyParser.json()); 
app.use(methodOverride('_method')); 
app.use(express.static(__dirname + '/public')); 

mongoose.connect('mongodb://localhost/myexpressapp'); 

var Schema = new mongoose.Schema({ 
    _id : String, 
    firstName : String, 
    lastName : String, 
    City : String, 
    Country : String 
}); 

var user = mongoose.model('user', Schema); 

app.post('/send', function(req, res){ 
    new user({ 
    _id: req.body.email, 
    firstName: req.body.firstName, 
    lastName: req.body.lastName, 
    City: req.body.city, 
    Country: req.body.country 
    }).save(function(err, doc){ 
     if(err) res.json(err); 
     else res.send('Successfully inserted'); 
    }); 
}); 

app.listen(3000, function() { 
    console.log('Example app listening on port 3000!'); 
}); 

index.pugコード:あなたはモデルvar user = mongoose.model('user', Schema);

ので

見つけるの正しい使用方法と定義userを使用する必要が

doctype html 
html(lang='en') 
    head 
    meta(charset='utf-8') 
    meta(http-equiv='X-UA-Compatible', content='IE=edge') 
    meta(name='viewport', content='width=device-width, initial-scale=1') 
    // The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags 
    // Bootstrap 
    link(href='css/bootstrap.min.css', rel='stylesheet') 
    // HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries 
    // WARNING: Respond.js doesn't work if you view the page via file:// 
    //if lt IE 9 
     script(src='https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js') 
     script(src='https://oss.maxcdn.com/respond/1.4.2/respond.min.js') 
    body 
    form(action='/send' method='POST') 
    | Email: 
    br 
    input(type='text', name='email', value='#{user.firstName}') 
    br 
    | First Name: 
    br 
    input(type='text', name='firstName', value='') 
    br 
    | Last Name: 
    br 
    input(type='text', name='lastName', value='') 
    br 
    | City: 
    br 
    input(type='text', name='city', value='') 
    br 
    | Country: 
    br 
    input(type='text', name='country', value='') 
    br 
    input(type='submit', value='Submit') 

    // jQuery (necessary for Bootstrap's JavaScript plugins) 
    script(src='https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js') 
    // Include all compiled plugins (below), or include individual files as needed 
    script(src='js/bootstrap.min.js') 
+0

さて、あなたのモデルは、ユーザーではないユーザーである:私は誰かがこれで立ち往生している場合には、ここで作業コードだ、それを考え出しました。あなたはここでそれを定義しました:var user = mongoose.model( 'user'、Schema); – Masterakos

+0

貢献してくれてありがとう、私もこれを試しましたが、それは 'ユーザーが定義されていません。'と応答します。 – Thimxo

+0

あなたのコードで定義されている 'User'ではなく' user'(小文字)です。 – Masterakos

答えて

1

user.find(...) 

あなたがあきらめることを拒否したら、このvar Users = mongoose.model('user', Schema);

+0

ありがとう、私はちょうどこのコードでそれを再試行しました: app.get( '/'、function(req、res){ user.find(function(err、user){ res.render( 'index'); }); });/*しかし、フォーム入力フィールドにはレンダリングされません。私は次のようにタイプしました:value = "#{user.firstName}"。しかし、それはレンダリングされませんでした - 私は何が間違っていますか? – Thimxo

+0

それは別の問題です。私は 'res.json(user);'を試すということは、単にデータベースからユーザーを出力したいという場合です。ファイルを送る場合は 'res.sendFile'を使います。回答についての明示的な文書を読む。 – Masterakos

+0

ええと、res.json(user)でレンダリングしようとしました。私のフォームのvalue = ""フィールドにはまだ文字列として表示されています。他のアイデア、どのようにデータを取得する? – Thimxo

0

奇跡が起こるように、あなたはモデルを宣言する必要がありUsers.findを使用したい場合。

app.js

app.get('/retrieve', function(req, res){ 
    post.find({}, function(err, docs){ 
     if(err) res.json(err); 
     else res.render('retrieve', {posts: docs}); 
    }); 
}); 

index.pug

html 
    head 
    title Registration Form 
    body 
ul 
each post in posts 
    form(action='', method='POST') 
     label(for='post[email]') Email: 
     input(type='text', name="post[_id]", value=post._id) 
     br 
     label(for='post[name]') Name: 
     input(type='text', name="post[name]", value=post.name) 
     br 
     label(for='post[age]') Age: 
     input(type='text', name="post[age]", value=post.age) 
     br 
     input(type='submit') 
関連する問題