【问题标题】:Nginx Server using for hosting NodeJs applications用于托管 NodeJs 应用程序的 Nginx 服务器
【发布时间】:2017-08-24 08:44:58
【问题描述】:

我是一个开发 nodeJs 应用程序的新手,并已使用 browsify 将其捆绑到文件 bundle.js 中,并希望将其部署在 Nginx 中。 我已经在 index.html(如下所示)中给出了对 bundle.js 的引用,我不确定这样做是否正确。 nginx.conf 文件是:

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 文件放在 htm\node_server 文件夹中,我试图像 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];
  }
};
`

我错过了什么吗? 如果需要更多详细信息,请发表评论。

【问题讨论】:

    标签: node.js nginx deployment


    【解决方案1】:

    由于误解了您的问题,我删除了之前的答案。

    问题似乎是http 库不适合浏览器化。换句话说,您的 bundle.js 文件中有一些 JavaScript 无法在 Web 浏览器中运行。

    您能否为bundle.js 文件中的失败行提供一些背景信息?

    这个问题似乎与你的 node.js / nginx 设置无关。

    【讨论】:

    • 您好 Tomahaug,谢谢。请查看我的 nodeJs 文件(编辑了问题)(实际上是我的 Angular 2 应用程序的服务器端)。我认为我在使用 express 时做了一些非常错误的事情。那么我们必须使用http服务器而不是express吗?或者有什么办法可以使用快递?
    • 嗨,我已将上下文添加到已编辑答案的 bundle.js 文件中的失败行中。
    • 嗨,Amal,很抱歉我的回复晚了。您似乎正在尝试将 node.js http 库捆绑到浏览器 - 这无法完成。 http 库是一个服务器端库,在客户端(浏览器)中没有任何用途。捆绑和优化 js 文件(通常)仅适用于客户端 JavaScript,而不适用于服务器端 JavaScript。所以你不需要捆绑任何东西来运行你的 Node.js 服务器。这有意义吗?
    【解决方案2】:

    在服务器上本地启动 node.js 应用程序而不是将 nginx 配置为反向代理不是更好吗? 这是详细的教程如何做到这一点: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-16-04

    【讨论】:

    • 嗨,你的意思是,我必须在系统中的 express 服务器上启动 node.js 应用程序并使用 nginx 作为反向服务器?
    猜你喜欢
    • 2021-04-10
    • 1970-01-01
    • 2015-02-16
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    相关资源
    最近更新 更多