首先, 目前所有在线用户的圣诞快乐 ...
我正在学习将一些基本代码从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;
答案 0 :(得分:0)
struct
和app
是不同的对象。 server
不应该拥有app
属性。
如the reference所述,
app.listen()方法返回一个http.Server对象
鉴于address
回调是常规函数,listen
上下文是其中的this
对象:
http.Server
答案 1 :(得分:0)
它与te Express版本有关,请查看迁移指南:
答案 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);
};