首页 > 解决方案 > 为什么导出函数会出现这种异常行为

问题描述

我在编写节点应用程序方面有一些经验,但是在这个带有代码的典型 JS 文件中遇到了这个问题

代理.js

const proxy = {
    host: '127.0.0.1'
};

exports.ProxyUrl = () => {
    return `http://${proxy.host}`;
}

从另一个 JS 文件调用此文件时

index.js

const proxyUrl = require('./proxy.js');
console.log(proxyUrl);

它应该打印“127.0.0.1”,但在控制台中打印

() => {
    return `http://${proxy.host}`;
}

这只发生在这个 JS 文件中,我的 JS 文件的其余部分运行良好。

标签: javascriptnode.js

解决方案


exports对象完全等同于require来自另一个文件的 a 所解析的内容。所以,当你赋值给对象的一个ProxyUrl​​属性时,导入的对象就会有一个属性和一个ProxyUrl属性。

如果您希望导出只是函数,而不是具有属性的对象,则分配给module.exports

const proxy = {
    host: '127.0.0.1'
};

module.exports = () => {
    return `http://${proxy.host}`;
};

然后你可以

const proxyUrl = require('./proxy.js');
console.log(proxyUrl());

否则,使用您的原始代码,您必须首先访问d 对象的ProxyUrl属性:require

const { ProxyUrl } = require('./proxy.js');
console.log(ProxyUrl());

推荐阅读