«Неперехваченная ошибка типа: Не удается прочитать свойство «прототип» неопределенной» ошибки в bundle.js

#javascript #node.js #google-chrome #browserify

Вопрос:

Я пытаюсь построить простую node.js сторона app. node работает нормально, но браузер не распознает функцию require. Чтобы обойти это, я использую Browserify. Я установил Browserify и запустил » browserify index.js -о bundle.js-командование. Но когда я запускаю браузер, я получаю «Неперехваченную ошибку типа: Не могу прочитать свойство «прототип» неопределенной» ошибки в bundle.js. Ошибка находится в следующей строке bundle.js.

 var res = Object.create(http.ServerResponse.prototype)
 

Независимо от того, что я пытаюсь, я не могу исправить это, поэтому я готов сдаться. Любая помощь будет оценена по достоинству.

Мой index.js заключается в следующем:

 const express = require('express');
const app = express();  
const path = require('path');
const bodyParser = require('body-parser');
const cors = require('cors');
const port = 3000;  //Set port to 3000. 
app.use( bodyParser.json() );  // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({  // to support URL-encoded bodies
  extended: true})); 
app.use(cors());
 

В моем index.html, У меня есть следующие включенные.

 <script src="bundle.js"></script>
<script src="index.js"></script>
 

Комментарии:

1. отформатируйте код правильно, используйте блок кода для написания кода.

Ответ №1:

Browersify может транспилировать JavaScript, чтобы устранить необходимость в том, чтобы браузер поддерживал модульную систему, хотя он не может «заполнять» библиотеки и фреймворки, доступные для NodeJS, например, запускать HTTP-сервер, как в вашем случае, используя express модуль. Они нуждаются в надлежащей среде выполнения NodeJS и не могут работать в простом браузере.

Браузеры предназначены для подключения к веб-серверам, а не сами являются веб-серверами!

Ограничения безопасности браузеров не позволят открыть TCP-порт. Мое предложение: запустите express сервер как отдельный процесс на Node.js время выполнения и используйте асинхронный JavaScript и XML (AJAX) для связи с ним.

Комментарии:

1. Спасибо, но не могли бы вы, пожалуйста, рассказать мне немного подробнее? Как запустить экспресс-сервер как отдельный процесс? код js на стороне браузера все равно не распознает функцию require, и что мне с этим делать? Наконец, можете ли вы как-нибудь дать мне общее представление о том, как использовать AJAX? Спасибо.

2. Я связал введение MDN с AJAX в ответе, чтобы запустить отдельный процесс, вам нужно создать совершенно другой экземпляр и разместить его где-нибудь, и ваш браузер очень хорошо распознает вашу функцию require с помощью browserify, хотя и не может создать HTTP-сервер, я прошу вас повторить мой ответ 😄.

3. Еще раз спасибо. Я прохожу через ссылку MDN re AJAX и пытаюсь понять ее, потому что я новичок. Я предполагаю, что мне нужно будет запустить свой локальный сервер за пределами браузера, а не внутри index.js код через Экспресс. Я думаю, что смогу сделать это, установив инструмент Веб-сервер для chrome из интернет-магазина chrome, или я могу установить http-сервер глобально в npm. Можете ли вы сказать мне, на правильном ли я пути, или вы можете предложить что-нибудь еще?

4. Или я могу продолжать использовать экспресс-сервер, но запускать его как отдельный процесс, но я не знаю, как запустить его как отдельный процесс, и, возможно, вы можете направить меня в правильном направлении.

5. Исправьте, что я говорю, что вы можете продолжать использовать экспресс-сервер или развернуть http-сервер глобально с помощью вашего метода, он работает в обоих направлениях! AJAX-это просто средство для подключения размещенного веб-сервера и нашего отдельного локального сервера!