2016-05-07 4 views
0

ich aus einem PHP-Hintergrund bin aber ein Knoten/Express-Website zum ersten Mal ausprobieren. Ich habe Express-Generator erfolgreich verwendet, um das Grundskelett auf localhost laufen zu lassen. Ich habe auch highcharts über npm installiert und folgte der instructions given by highcharts, um es über require() in mein Projekt hinzuzufügen. Ich habe jetzt in meinem index.js:Node.js/Express console.log nicht ausgibt, highcharts.js undefiniert Fehler geben

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

 
// Load module after Highcharts is loaded 
 
require('highcharts/modules/exporting')(Highcharts); 
 

 
console.log(Highcharts); 
 

 
// Create the chart 
 
Highcharts.chart('container', { /*Highcharts options*/ }); 
 

 
/* GET home page. */ 
 
router.get('/', function(req, res, next) { 
 
    res.render('index', { title: 'Express' }); 
 
}); 
 

 
module.exports = router;

Ich habe zwei Fragen:

1) console.log() ausgibt, nicht an die Klemme oder Browser-Konsole, wenn DEBUG ausgeführt = Projekt: * npm Start. Gibt es etwas anderes aus, das ich nicht überprüft habe, oder muss ich etwas mehr tun, um das zu sehen?

2) erforderlich ('highcharts/modules/Export') (Highcharts); wirft Typeerror: kann Eigenschaft ‚Dokument‘ undefinierter bei /Applications/MAMP/htdocs//node_modules/highcharts/modules/exporting.js:9:115
Wo habe ich mess up lesen?

+0

Highcharts ist ein clientseitiges Framework, Sie laden es nicht auf Ihrem Server. Sie benötigen Zugriff auf das Highcharts-Objekt im Frontend. Siehe diesen Link: http://www.highcharts.com/docs/getting-started/installation. Der npm-Code, auf den Sie sich beziehen, ist, wenn Sie so etwas wie requirs im Frontend verwenden. – user2263572

+0

'highcharts/modules/exporting' ist [browser-only code] (http://www.highcharts.com/docs/export-module/export-module-overview), kein Knoten-Modul. Sie erhalten kein Konsolenprotokoll, da Ihr Skript vor dem Erreichen dieser Zeile Fehler aufweist. –

Antwort

1

Der Grund, dass die Highcharts Beispiel Sie require() verknüpft wird ist, dass viele Menschen durch Browserify ihren Browser Code ausführen, um ihre Lieblings-Knoten Idiome zu halten verwenden und ein gewisses Maß an isomorphic design zu halten.

Trotz, dass Highcharts noch für den Browser gedacht und kann nicht in Knoten verwendet werden. Ihre Express-App soll eine HTML-Seite liefern, die selbst Highcharts lädt. Sie sind nicht auf die Verwendung von Browserify beschränkt, aber es ist eine beliebte Wahl für diesen Anwendungsfall.

Auch, wie für Ihre Unsicherheit darüber, wo für Protokolle suchen: immer das Terminal. Ihre Node-Programme werden nie an die Browser-Konsole anmelden, es sei denn, Sie gehen aus dem Weg, um sie so mit ausgefallenen Dinge wie Node Inspector machen.

+0

Ausgezeichnete detaillierte Antwort, danke. Die Dinge fangen jetzt an, mir ein bisschen mehr Sinn zu machen. Was das console.log-Problem angeht, bin ich mir nicht sicher warum, aber es hat jetzt angefangen zu arbeiten. Ich kann nur annehmen, dass ich die Reihenfolge der Dateispeicherung/des Debuglaufs durcheinander gebracht habe oder dass die App zu anderen Zeiten abgestürzt ist, bevor console.log() erreicht wurde - ehrlich gesagt, ich weiß es nicht. Trotzdem vielen Dank! – jblx

+0

Froh, dass es funktioniert hat. Ich vermute, Sie haben recht, warum es vorher nicht funktioniert hat. Eine Möglichkeit, Node bei Fehlern rauschintensiver zu machen, besteht darin, diese kleine Zeichenfolge am Anfang jeder Datei hinzuzufügen: ''use strict';' siehe: http://justbuildsomething.com/node-js-best-practices/#4 –

0

einen einen Blick auf die Fehler Nehmen:

require('highcharts/modules/exporting')(Highcharts); is throwing TypeError: Cannot read property 'document' of undefined

Die für die document suchen, die eine Browser-API ist, ist HighCharts Client-Seite nur.

+0

Macht Sinn, danke. Ich denke, ich bin immer noch etwas verblüfft über die Idee von serverseitigem JS vs. clientseitig und wie diese Dinge in einer Node/Express-App getrennt sind. – jblx