Node.js Express ES6 app.address不是函数

时间:2018-12-24 16:00:05

标签: node.js express ecmascript-6 ecmascript-5

首先, 目前所有在线用户的圣诞快乐 ...

我正在学习将一些基本代码从ES5重写为ES6 ..

使用ES5 js编写的基本Node.js Express服务器

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 :(得分:0)

structapp是不同的对象。 server不应该拥有app属性。

the reference所述,

  

app.listen()方法返回一个http.Server对象

鉴于address回调是常规函数,listen上下文是其中的this对象:

http.Server

答案 1 :(得分:0)

它与te Express版本有关,请查看迁移指南:

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

答案 2 :(得分:0)

这将按预期工作。

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

来自express docs: app.listen()方法返回http.Server对象,并且(对于HTTP)是用于以下目的的便捷方法:

app.listen = function() {
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};