2016-09-07 3 views
0

Ich bin derzeit mit dem folgenden Problem stecken: Ich kann keine Daten von meinem MongoDB abrufen und auf der Clientseite oder einfach auf einer anderen Route anzeigen. Ich habe mehrere Versuche wie verwendet:Abrufen von Daten von Mongodb über Formulareingabe und Pug Template Renderer

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

Allerdings endet dies in 'Benutzer ist nicht definiert'. Wenn ich die Mongo-Shell benutze und 'show collections' abfrage, finde ich die Sammlung 'users' mit den Daten aus der Formulareingabe.

Ich würde es sehr schätzen, wenn mir jemand erklären könnte, wie man die Daten basierend auf dem folgenden Code abruft und in 'index.pug' wie # {users.firstName} anzeigt.

App.js Code:

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 Code:

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

Nun, Ihr Modell ist Benutzer nicht Benutzer. Sie haben es hier definiert: var user = mongoose.model ('user', Schema); – Masterakos

+0

Danke für den Beitrag, ich habe das auch versucht, aber es antwortet mit 'Benutzer ist nicht definiert.' – Thimxo

+0

nicht "Benutzer", sondern "Benutzer" (Kleinbuchstaben) wie in Ihrem Code definiert. – Masterakos

Antwort

1

Sie haben user zu verwenden, die Sie als Modell definiert var user = mongoose.model('user', Schema);

So ist die korrekte Verwendung von finden wäre:

user.find(...) 

Wenn Sie möchten, dass Users.find verwenden, dann sollten Sie das Modell wie diese var Users = mongoose.model('user', Schema);

+0

Danke, ich erneut versucht es nur mit diesem Code: app.get ('/', function (req, res) { user.find (function (err, user) { res.render ('index'); }); });/* Es wird jedoch nicht im Formulareingabefeld gerendert. Ich tippte: Wert = "# {user.firstName}". Aber es hat nicht gemacht - was mache ich falsch? – Thimxo

+0

Nun, das ist ein anderes Thema. Ich meine, versuche 'res.json (user);' wenn du nur die Benutzer aus der Datenbank ausgeben willst. Wenn Sie eine Datei senden möchten, verwenden Sie 'res.sendFile'. Lesen Sie die ausdrückliche Dokumentation über die Antworten. – Masterakos

+0

Hmm, ich habe gerade versucht, es mit res.json (user) gerendert zu bekommen; aber es wird immer noch als String in meinem form value = "" Feld angezeigt. Irgendwelche anderen Ideen, wie man die Daten holt? – Thimxo

0

Wunder erklären passieren, wenn Sie aufgeben zu verweigern. Habe ich es aus, falls jemand mit diesem stecken, hier ist der Arbeitscode:

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') 
Verwandte Themen