了解导出默认值中传递的各种参数

时间:2018-12-05 23:18:48

标签: javascript node.js

当我偶然发现以下代码片段时,正在浏览Web上的一篇文章。

我笔者已经使用babel在节点中使用ES6语法,并且将我们的应用分为两部分

  1. App.js
  2. Server.js

在我们的Server.js中,他做了类似的事情

import express from 'express';
import cors from 'cors';

const app = express();

function setPort(port = 5000) {
 app.set('port', parseInt(port, 10));
}

function listen() {
 const port = app.get('port') || 5000;
 app.listen(port, () => {
   console.log(`The server is running and listening at http://localhost:${port}`);
 });
}

app.use(cors({
 origin: '*', // Be sure to switch to your production domain
 optionsSuccessStatus: 200
}));

// Endpoint to check if the API is running
app.get('/api/status', (req, res) => {
 res.send({ status: 'ok' });
});

export default {
 getApp: () => app,
 setPort,
 listen
};

这句话对我来说没有意义

   export default {
     getApp: () => app,
     setPort,
     listen
    };

然后在app.js中,他做到了

import server from './server';

server.listen();

export default server;

问题:有人可以帮我解释一下这是怎么回事吗?就像为什么我们的getApp: () => app这样写,为什么setPortlisten那样写?

Ps:我知道导出默认值是什么

2 个答案:

答案 0 :(得分:2)

好吧,简单地说,这是一个使用ES6 arrow functions语法的内联函数定义,该函数返回内部app实例。

与:没什么不同

getApp: function() {
  return app;
}

之所以将其声明为内联是因为您实际上在模块中的其他任何地方都没有函数定义。如果您预先添加了函数,则可以使用与listen / setPort

相同的方式导出

答案 1 :(得分:2)

作者正在导出具有三个属性的对象作为默认导出。

属性1:getApp- 此属性具有一个值,该值是一个从server.js文件返回img变量的函数,该文件仅是Express实例。换句话说,这是一种返回快速应用程序的方法。

属性2:setPort- 此属性的值等于server.js文件中定义的app函数

属性3:听- 此属性的值等于server.js文件中定义的setPort函数

因此,当作者在app.js文件中调用listen时,他/她只是在调用他/她从server.js文件导入的server.listen()函数。不太确定为什么他们选择以这种方式设置应用程序...