Node.js Express ES6 app.address не является функцией - PullRequest
0 голосов
/ 24 декабря 2018

Во-первых, Счастливого Рождества всем онлайн-людям в настоящее время ...

Я учусь переписывать некоторый базовый код с ES5 на ES6 ..

Базовый сервер Node.js Express, написанный на ES5 js

ES5

/* eslint-disable no-console */
var express = require('express');
var router = require('./routes');

var app = express();
app.use(router);

var server = app.listen(3000, function () {
  var port = server.address().port;
  console.log('Example app listening on port %s!', port);
});

module.exports = server;

работает нормально!

Теперь япереписал его, используя ES6 js

ES6

/* eslint-disable no-console */
import express from 'express';
import router from './routes';

const app = express();
app.use(router);

app.listen(3000, function () {
  var port = app.address().port; ?? 
  console.log('Example app listening on port %s!', port);
});

export default app;

при запуске, я получаю ошибку ..

app.address is not a function

Но если я изменюблок app.listen, затем он работает нормально ... в чем проблема с app.address ()?

ES6

/* eslint-disable no-console */
import express from 'express';
import router from './routes';

const app = express();
app.use(router);

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

export default app;

Ответы [ 3 ]

0 голосов
/ 24 декабря 2018

Это как-то связано с версией Express, посмотрите руководство по миграции:

https://expressjs.com/es/guide/migrating-4.html

0 голосов
/ 24 декабря 2018

Это будет работать как положено.

 const server=app.listen(3000, function () {
    let port = server.address.port; 
      console.log('Example app listening on port %s!', port);
    });

Из экспресс-документы: Метод app.listen () возвращает объект http.Server, а (для HTTP) - удобный метод для следующего:

app.listen = function() {
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};
0 голосов
/ 24 декабря 2018

app и server - разные объекты.app не должно иметь свойства address.

Поскольку указывает состояния,

Метод app.listen () возвращает http.Серверный объект

Учитывая, что listen обратный вызов является обычной функцией, this контекст - это http.Server объект внутри:

app.listen(3000, function () {
  console.log('Example app listening on port %s!', this.address().port);
});
...