2016-11-30 4 views
0

Er yall, ich brauche etwas Hilfe mit meinem Knoten und MongoDB-Anwendung.Abrufen bestimmter Daten aus Mongodb-Sammlungen mit Knoten

Also habe ich eine MongoDB-Datenbank und ich holen die Daten mit node.js mit express.js. Ich hole die Daten mit meiner Anwendung und ich kann sie sogar an meinen Browser senden. Aber ich möchte eine Vorlage rendern (siehe unten).

<!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> 

Mit diesem Modell

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

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

mongoose.model('emaildata', usersSchema); 

Aber wenn ich versuche, und tun dies mit diesem Skript

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; 

Es hat nichts machen. Ich glaube, das Problem ist 1. Ich verwende nicht die richtige Syntax, um die spezifischen Daten im Objekt, wie Name oder E-Mail, zu identifizieren. Ich versuche dies etwa auf halbem Weg durch das app.get ('/ data' .... 2. Ich importiere das Objekt nicht korrekt, also wenn ich versuche, die Daten zum Rendern meiner Vorlage zu verwenden, es ist nichts.

Dank einem Haufen!

+0

ich Mungo nie verwenden, aber ich denke, das Problem kommen aus dem Weg Sie emaildata abrufen. Da Sie nicht findOne verwenden, sollte Ihr Emaildata-Ergebnis ein Array sein, oder? – Simon

Antwort

0

Zuerst wird res.send nicht Ihre Template-Datei verwenden.

ich gehe davon aus, dass Ihr Name der Template-Datei ist "E-Mail", so verwendet res.render('email', {information : emaildata}) und in der Vorlage Datei, benutze {{information.name}} und {{information.email}}, um sie zu rendern. (Ich habe hjs nicht benutzt, daher könnte es einen Syntaxfehler geben.)

+0

Hey, danke für den Kommentar. So funktioniert es, was ich bekomme, wenn ich diesen res.render sende ('email', {title: 'E-Mails', information: emaildata}); zu dieser Vorlage

Hallo, mein Name ist {{Information}} und ich bin {{Information}} Jahre alt!

senden Sie mir mein ganzes Json-Objekt aus meiner Datenbank. So funktioniert das Holen und Senden super. Das einzige Problem ist, dass ich Name oder E-Mail von innerhalb meines Json-Objekts angeben kann. –

+0

Beim Hinzufügen des vorherigen Kommentars fehlten die Zeichen. Wenn ich versuche, information.email oder information.name in meiner Vorlage zu machen, wird nichts an meine Webseite gesendet. Nicht sicher warum. Hilfe! –

+0

@YisroelArnson 'hjs' wird ** nicht ** gepflegt und unterstützt möglicherweise Express 4.x nicht, ich empfehle Ihnen, [ejs] (https://www.npmjs.com/package/ejs) zu verwenden und es erneut zu versuchen. – solarhell

0

Zunächst einmal

Import der Modal-Schema

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

Dann, wenn Sie bereits einige Daten in Ihrer Datenbank haben, erhalten diese auch geholt, indem Sie diese in Ihre modal

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

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

mongoose.model('emaildata', usersSchema); 
Aktualisierung

Dann erhalten Sie alle Daten:

Zuerst deklarieren Sie den Router

var router = express.Router(); 

erhalten die Daten

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

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