2017-08-24 6 views
1

Ich bin ein Neuling, der eine NodeJs-Anwendung entwickelt und sie mit Browsify zu einer Datei bundle.js gebündelt hat und sie in Nginx bereitstellen möchte. Ich habe den Verweis auf die bundle.js in der index.html (siehe unten) gegeben, die ich nicht sicher bin, ist der richtige Weg zu tun. Die nginx.conf Datei ist:Nginx Server zum Hosten von NodeJs-Anwendungen

server { 

    listen 8056; 
    root html/node_server; 
    index index.html index.htm; 
    server_name localhost; 
    location/{ 
     try_files $uri $uri/ /index.html; 
    } 
    } 

Die Datei index.html und bundle.js Dateien abgelegt werden in htm \ node_server Ordner und ich versuche, Port 8056 wie http://localhost:8056 zu treffen. Aber zeigt Fehler:

Uncaught TypeError: Cannot read property 'prototype' of undefined in the bundle.js : 78869

im Browser-Konsole, aber nichts in Nginx Fehlerprotokoll.

bundle.js: 78.869 ist

`/** 
* Request prototype. 
* @public 
*/ 

var req = Object.create(http.IncomingMessage.prototype)` 

Meine Datei index.html ist:

<!doctype html> 
<html> 

    <meta charset="utf-8"> 
    <title>DEV</title> 
    <base href="/"> 

<body> 

<script type="text/javascript" src="bundle.js"></script> 
</html> 

NodeJS Datei:

var sql = require("mssql"); 
var express = require('express'); 
var http = require("http"); 
var bodyParser = require('body-parser'); 
var jwt = require('jsonwebtoken'); 
var app = express(); 
app.use(bodyParser.json()); 
app.use(function (req, res, next) { 
    //Enabling CORS 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, contentType,Content-Type, Accept, Authorization"); 
    next(); 
}); 
app.get('/',function(req,res){ 
res.send('Working'); 
}); 

Bundle.js genauer:

`/** 
* Module dependencies. 
* @private 
*/ 

var accepts = require('accepts'); 
var deprecate = require('depd')('express'); 
var isIP = require('net').isIP; 
var typeis = require('type-is'); 
var http = require('http'); 
var fresh = require('fresh'); 
var parseRange = require('range-parser'); 
var parse = require('parseurl'); 
var proxyaddr = require('proxy-addr'); 

/** 
* Request prototype. 
* @public 
*/ 

var req = Object.create(http.IncomingMessage.prototype) ---- Error here 

/** 
* Module exports. 
* @public 
*/ 

module.exports = req 

/** 
* Return request header. 
* 
* The `Referrer` header field is special-cased, 
* both `Referrer` and `Referer` are interchangeable. 
* 
* Examples: 
* 
*  req.get('Content-Type'); 
*  // => "text/plain" 
* 
*  req.get('content-type'); 
*  // => "text/plain" 
* 
*  req.get('Something'); 
*  // => undefined 
* 
* Aliased as `req.header()`. 
* 
* @param {String} name 
* @return {String} 
* @public 
*/ 

req.get = 
req.header = function header(name) { 
    if (!name) { 
    throw new TypeError('name argument is required to req.get'); 
    } 

    if (typeof name !== 'string') { 
    throw new TypeError('name must be a string to req.get'); 
    } 

    var lc = name.toLowerCase(); 

    switch (lc) { 
    case 'referer': 
    case 'referrer': 
     return this.headers.referrer 
     || this.headers.referer; 
    default: 
     return this.headers[lc]; 
    } 
}; 
` 

Fehle ich etwas? Wenn mehr Details erforderlich sind, bitte kommentieren.

Antwort

1

Ich löschte meine vorherigen Antworten, da ich Ihr Problem falsch verstanden hatte.

Das Problem scheint, dass die http-Bibliothek nicht für die Browserisierung geeignet ist. Mit anderen Worten, in Ihrer Datei bundle.js ist JavaScript vorhanden, das nicht in einem Webbrowser ausgeführt werden kann.

Konnten Sie den fehlerhaften Zeilen in der Datei bundle.js einen Kontext geben?

Dieses Problem scheint nichts mit Ihrer node.js/nginx-Installation zu tun zu haben.

+0

Hallo Tomahaug, Danke. Bitte sehen Sie meine nodeJs-Datei (bearbeitet die Frage) (das ist eigentlich die Server-Seite meiner angular 2-Anwendung). Ich denke, ich habe etwas schrecklich falsch gemacht, da ich Express benutzte. Also müssen wir http-Server anstelle von Express verwenden? Oder gibt es einen Weg, den ich Express nutzen kann? – Amal

+0

Hallo, Ich habe den Kontext zu den fehlerhaften Zeilen in der Datei bundle.js in der Antwort, die bearbeitet wird, hinzugefügt. – Amal

+0

Hallo Amal, Entschuldigung für meine späte Antwort. Es scheint, dass Sie versuchen, die http-Bibliothek node.js im Browser zu bündeln - das ist nicht möglich. Die http-Bibliothek ist eine serverseitige Bibliothek und hat keine Verwendung im Client (Browser). Das Bündeln und Optimieren von js-Dateien ist (im Allgemeinen) nur für clientseitiges JavaScript und nicht für serverseitiges JavaScript. Sie müssen also nichts bündeln, um Ihren Node.js Server zu betreiben. Macht das Sinn? – tomahaug

Verwandte Themen