2017-08-24 8 views
1

私はnodeJsアプリケーションを開発していて、browsifyを使用してbundle.jsというファイルにバンドルしており、Nginxで展開したいと考えています。 index.html(下記参照)の中のbundle.jsへの参照を与えましたが、正しい方法はわかりません。 nginx.confファイルは次のとおりです。Nginx ServerでNodeJsアプリケーションをホストするために使用

server { 

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

index.htmlファイルとbundle.jsファイルはフォルダnode_server HTM \に配置されていると私はhttp://localhost:8056のようにポート8056をヒットしようとしています。しかし、エラーを表示:

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

ブラウザコンソールで、しかし何もNginxのエラーログに表示されます。

bundle.js:78869がある

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

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

私のindex.htmlファイルは次のとおりです。

<!doctype html> 
<html> 

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

<body> 

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

NodeJsファイル:

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より詳細に:

`/** 
* 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]; 
    } 
}; 
` 

何か不足していますか? 詳細が必要な場合は、親切にコメントしてください。

答えて

1

あなたの問題を誤解していたため、以前の回答が削除されました。

問題は、httpライブラリがブラウズされるのに適していないことが考えられます。言い換えれば、あなたのbundle.jsファイルには、Webブラウザで実行できないJavaScriptがあります。

bundle.jsファイルの不具合のある行にいくつかのコンテキストを教えてください。

この問題は、node.js/nginxセットアップとは関係がありません。

+0

こんにちはTomahaug、ありがとうございます。私のnodeJsファイル(質問を編集)を見てください(これは実際に私の2番のアプリケーションのサーバー側です)。私は急行を使っていたので、私はそこで何かひどく間違ったことをしたと思う。では、Expressの代わりにhttpサーバーを使用する必要がありますか?または私は表現を使うことができる方法はありますか? – Amal

+0

こんにちは、私は、編集されている答えのbundle.jsファイルの失敗した行にコンテキストを追加しました。 – Amal

+0

こんにちは、私の遅い返事を申し訳ありません。 node.jsのhttpライブラリをブラウザにバンドルしようとしているようです。これはできません。 httpライブラリはサーバー側のライブラリであり、クライアント(ブラウザ)での使用はありません。 jsファイルのバンドルと最適化は、(一般的に)クライアント側のJavaScriptに対してのみ行われ、サーバー側のJavaScriptでは行われません。したがって、Node.jsサーバーを実行するために何もバンドルする必要はありません。 これは意味がありますか? – tomahaug

関連する問題