2016-03-22 5 views
0

Ich bin neu zu Knoten js. Ich schreibe eine Nodejs-Anwendung, um Daten von MongoDB zu holen und auf der Seite in einer Tabelle anzuzeigen. Aber die Daten werden nicht angezeigt.
Anwendungsfall ist:
Der Benutzer navigiert zu localhost:8999/, um zur Hauptseite mit der Bezeichnung Warteschlange zu gelangen. Hier ist ein Link für eine Seite HealthReport vorhanden, klicken Sie auf welchen Benutzer würde navigieren zu , wo ich die Daten von Mongo anzeigen müssen. Ich kann die JSON-Daten im Browser anzeigen, aber die Anzeige auf der gewünschten Seite funktioniert nicht. Gibt es eine bestimmte Verzeichnisstruktur, der ich folgen muss? Ich verwende eine js-Datei, um das zu tun, aber es funktioniert nicht. Diese Datei ist healthreport-db.js unter:Knoten js: nicht in der Lage, Json Daten in der HTML-Tabelle (zeigt leer), aber die URL zeigt die Daten

$(function() { 


    var startTime = new Date(); 
    startTime.setMonth(startTime.getHours() - 6); 

    $.ajax({ 
     url : "http://localhost:8999/healthreport/getHealthReport", 
     dataType: "json", 
     success : function(data) { 

      var latest = data.length - 1; 
      var snapShotTime = moment.utc(data[latest].snapShotTime).toDate(); 
      var nfs = data[latest].nfs; 
      var hive = data[latest].hive; 
      console.log("db.js hit"); 

      // Add values to Hive Stats Table 
      $("#nfs").text("NFS: "+nfs); 
      $("#hive").text("HIVE: "+hive); 


     }, 
     error : function() { 
      console.log("failed to get hiveInfo data"); 
     } 
    }); 
}); 

healthreport.html-Datei (wo ich brauche die analysierten json Daten anzuzeigen) in "Ansichten" Verzeichnis:

<html> 
<head> 

<title>HealthReport</title></head> 
<body> 
Health Report 
<table> 
    <tr> 
     <th>value</th> 
    </tr> 
    <tr> 
     <td id="nfs"></td> 
    </tr> 
    <tr> 
     <td id="hive"></td> 
    </tr> 
</table> 
<script src="healthreport-db.js"></script> 
</body> 
</html> 

queue.html Datei in "Ansichten" Verzeichnis:

<html> 
<head> 
<title>Queue</title></head> 
<body> 
Queue<br> 
<a href="healthreport.html">Health Report</a> 
</body> 
</html> 

Ich habe eine Haupt-js-Datei namens main_web.js:

var mongoose = require('mongoose'); 
var express = require('express'); 
var bodyParser = require('body-parser'); 

var collectorConn = mongoose.createConnection('mongodb://localhost:27017/mongotest3'); 
exports.collectorConn = collectorConn; 
var app = express(); 

var publicOpts = { maxAge: 86400000 }; // Max age of 1 day for static content 

// Routes 
var route = require('./route.js'); 
var healthReport = require('./healthReportRoute.js'); 


app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: false})); 
app.use(express.static('public', publicOpts)); //all client source will be in public folder 
app.use(express.static('views')); //views folder contains html & ejs files 
app.set('view engine', 'ejs'); 
app.engine('html', require('ejs').renderFile); //render html files as ejs 


// Route handlers 
app.use('/', route); 
app.use('/healthreport', healthReport); 


var port = process.env.PORT || 8999; 
app.listen(port); 
console.log("open your browser to localhost:" + port); 

exports.app = app; 

Dann habe ich ein route.js, der als Router fungiert:

var express =require('express'); 
var router = express.Router(); 

/* Home page */ 
router.get('/', function(req, res, next) { 
    res.render('./queue.html',{title: "Queue"}); 
    }); 

router.get('/healthreport', function(req, res, next) { 
     res.render('./healthreport.html',{title: "HealthReport"}); 
    }); 

module.exports = router; 

Und dann habe ich ein healthReportRoute.js, die die JSON-Daten, die im Internet über die URL localhost:8999/healthreport/getHealthReport zu holen Lage ist:

var express =require('express'); //add express 
var router = express.Router(); 
var moment = require('moment'); //add moment 

//mongoose schema 
var appTableProdSchema = require("./appTableProdSchema.js"); 

router.get('/getHealthReport', function(req, res) { 
    // Return the most recent document 
    var records = appTableProdSchema 
        .find() 
        .sort({'_id': -1}) 
        .limit(1) 
        .exec(function(err, data) { 
         if (err) return res.sendStatus(500); 
         res.json(data); 
        }); 
}); 

module.exports = router; 

Die appTableProdSchema.js ist:

var conn = require('./main_web').collectorConn; 

module.exports = conn.model('AppTableProd', { 
    snapShotTime : String, 
    nfs: Array,  
    hive: Array 
}); 

Ich weiß nicht, wie man die Daten in die healthreport.html Seite bringt. Bitte helfen Sie

+0

Wenn Sie nach oben ziehen http: // localhost: 8999/healthreport/getHealthReport im Browser können Sie die Daten sehen? –

+0

@Jesse: Ja, ich kann. Ich habe die Datei healthreport-db.js (oben) geschrieben, um es zu analysieren, aber irgendwie scheint es nicht zu funktionieren oder ausgelöst zu werden. habe ich es auf einen falschen weg gelegt? oder stimmt etwas nicht mit dem code? – aiman

+0

Wenn Sie die Dev-Tools in Ihrem Browser öffnen und auf der Registerkarte "Netzwerk" nachsehen ... können Sie die Anforderung sehen, dass getHealthReport erstellt wird ... Wenn ja, in welchem ​​Status? Wenn es 200 ist, gab es einen anderen Fehler in der Konsole? –

Antwort

1

Sie verwenden die jQuery-Bibliothek stark, haben sie aber nicht importiert.

Jedes Mal, wenn Sie $ in Ihrer Datei "Healthreport-db.js" haben, versuchen Sie, auf die jQuery-Bibliothek zu verweisen.

Sie können die Bibliothek herunterladen und in Ihr Projekt einbinden oder direkt mit der Bibliothek verlinken, die auf einem der vielen CDNs gehostet wird. Hier ist die Dokumentation und den Code zu importieren aus dem Google-CDN:

http://jquery.com/download/

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> 

Ihre healthreporter.html würde wie folgt aussehen:

<html> 
<head> 

<title>HealthReport</title></head> 
<body> 
Health Report 
<table> 
    <tr> 
     <th>value</th> 
    </tr> 
    <tr> 
     <td id="nfs"></td> 
    </tr> 
    <tr> 
     <td id="hive"></td> 
    </tr> 
</table> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> 
<script src="healthreport-db.js"></script> 
</body> 
</html> 
+0

hinzugefügt. aber immer noch ... kein Ergebnis. Ich wünschte, ich könnte dir den Screenshot zeigen. – aiman

+0

Verwenden Sie Chrom? Wenn ja, gehen Sie zu Weitere Tools> Entwicklertools. Öffne die Konsole Tab ... gibt es Fehler? –

+0

i siehe 1 Fehler gibt: healthreport-db.js: 4 Uncaught Typeerror:. $ (...) slimScroll ist keine Funktion (anonyme Funktion) @ healthreport-db.js: 4i @ jquery.min. js: 2j.fireWith @ jquery.min.js: 2n.extend.ready @ jquery.min.js: 2J @ jquery.min.js: 2 – aiman

Verwandte Themen