Ошибка приложения Hello World Node.js / Express

#node.js #express #nginx

#node.js #экспресс #nginx

Вопрос:

Я изучаю СРЕДНИЙ стек, поэтому начал с Node.js и сначала выразите. Я запускаю Nginx в Windows 10. Я установил последний узел. Версия NPM 3.10.3 , версия 6.7.0 узла и экспресс-версия 4.14.0 . Я сделал npm install express --save , npm install mongoose --save , npm install body-parser --save , и создал server.js досье. Я node server проверил свои источники и получил следующую ошибку:

C:nginxhtml >сервер узлов
C:nginxhtmlserver.js:7
app.get('/', функция(req, res){
 ^

Ошибка типа: app.get не является функцией
в объекте. (C:nginxhtmlserver.js:7:5 )
 в модуле._compile (module.js:556:32)
в объекте.Module._extensions..js (module.js:565:10)
в модуле.загрузка (module.js: 473:32)
в tryModuleLoad (module.js: 432:12)
в функции.Модуль._load (module.js:424:3)
 при запуске Module.runMain (module.js:590:10)
при запуске (bootstrap_node.js:394:7)
 при запуске (bootstrap_node.js:149:9)
 в bootstrap_node.js:509:3

C:nginxhtml >

И код в моем server.js файл является:

 var express = require('express');
var express = require('mongoose');
var express = require('body-parser');

var app = express();

app.get('/', function(req, res){
  res.send('hello world');
});

app.listen(80);
  

Я не уверен, как приложение hello world может пойти не так. Я видел много tuts и кода с одним и тем же, но работающих для них. Даже официальное приложение Hello world от Express имеет тот же код.

Ответ №1:

попробуйте это

 var express = require('express');
var mongoose= require('mongoose');
var bodyparser = require('body-parser');

var app = express();

app.get('/', function(req, res){
 res.send('hello world');
});

app.listen(80);
  

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

1. EADDRINUSE означает, что порт, 80 в данном случае, уже используется. Итак, вы можете просто изменить номер порта, выбрать большее число, например 3000 или 8080.

2. да, но 80 — это тот, на котором работает мой nginx. разве оба не должны быть одинаковыми? мне жаль, что я родом из php, поэтому не так много идей

3. @JackSlayer94 — Нет. Вы запускаете nginx на 80 и настраиваете его для пересылки на ваш node.js сервер на каком-то другом порту, и вы запускаете свой node.js сервер на этом другом номере порта. На любом заданном порту может прослушиваться только один серверный процесс.

Ответ №2:

Вам необходимо установить express не expression так, как показано ниже

   npm install express --save
  

и тогда вам нравится играть

 var express = require('express');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');

var app = express();

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())

app.get('/', function(req, res){
  res.send('hello world');
});

app.post('/', function(req, res){
  res.json({data: req.body});
});

app.listen(3000);
  

а затем попробуйте прослушать другой порт, который выше 1024, может быть 3000 или 8080 или что-нибудь еще, в противном случае вам нужно запустить cmd от имени администратора

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

1. Я почти уверен, что они имели в виду Express, поскольку expression модуль не имеет версии 4.14.0.

2. Я полагаю, @JackSlayer94 путается между выражением и выражением, иначе мы должны сообщить об ошибке в espression):

3. @JackSlayer94, который вы присвоили body-parser express переменной, поэтому не работает, посмотрите обновленный код