Javascript 自动导出节点函数的最佳实践 目标

Javascript 自动导出节点函数的最佳实践 目标,javascript,node.js,express,Javascript,Node.js,Express,我是node的新手,我正在尝试以一种不必跟踪导出我在该文件中编写的每个单函数的方式编写代码 台阶 我有一个函数 general.js 我如何调整它,使我的功能自动导出 我试过了 import request from 'request-promise' import env from 'dotenv' const dotenv = env.config(); module.exports = () => { let general = {}; general.get

我是node的新手,我正在尝试以一种不必跟踪导出我在该文件中编写的每个单函数的方式编写代码


台阶 我有一个函数

general.js

我如何调整它,使我的功能自动导出


我试过了

import request from 'request-promise'
import env from 'dotenv'
const dotenv = env.config();

module.exports = () => {
    let general = {};

    general.getInfo = ($mac) => {
        return new Promise((resolve, reject) => {
            request({ uri: `${process.env.API_HOST}/${$mac}` })
                .then((count) => resolve(JSON.parse(count).data))
                .catch((error) => reject(error));
        });
    }
    return general;
}
我一直在

错误:Route.post()需要回调函数,但得到了一个[object Undefined]


我如何进一步调试它呢?

那么,您想在文件中编写一些函数,它们都应该导出,因为它们是函数?恐怕不可能。您必须显式导出。

那么,您想在文件中编写一些函数,并且它们都应该导出,因为它们是函数?恐怕不可能。您必须显式导出。

可以直接将函数放入导出对象中:

module.exports = {
  getInfo(req, res) {
    //...
  },
  // type here ...
};
或者转到Typescript,然后可以执行以下操作:

export function getInfo(req, res) {
  //...
}

可能只是将函数直接放入导出对象中:

module.exports = {
  getInfo(req, res) {
    //...
  },
  // type here ...
};
或者转到Typescript,然后可以执行以下操作:

export function getInfo(req, res) {
  //...
}

我通常是这样做的:

exports.getInfo = (req, res) => {
    var $mac = req.body.mac;
    return new Promise((resolve, reject) => {
        request({ uri: `${process.env.API_HOST}/${$mac}` })
            .then((cpe) => resolve(JSON.parse(cpe).data))
            .catch((error) => reject(error));
    });

}
 module.exports = {
    let general = {};
     general.getInfo = ($mac) => {
        return new Promise((resolve, reject) => {
            request({ uri: `${process.env.API_HOST}/${$mac}` })
                .then((count) => resolve(JSON.parse(count).data))
                 .catch((error) => reject(error));
        });
     } }

我通常是这样做的:

exports.getInfo = (req, res) => {
    var $mac = req.body.mac;
    return new Promise((resolve, reject) => {
        request({ uri: `${process.env.API_HOST}/${$mac}` })
            .then((cpe) => resolve(JSON.parse(cpe).data))
            .catch((error) => reject(error));
    });

}
 module.exports = {
    let general = {};
     general.getInfo = ($mac) => {
        return new Promise((resolve, reject) => {
            request({ uri: `${process.env.API_HOST}/${$mac}` })
                .then((count) => resolve(JSON.parse(count).data))
                 .catch((error) => reject(error));
        });
     } }

老实说,我还没有找到最佳实践指南。我读过一篇文章,很清楚应该怎么做

如果我们以您的代码为例,我们可以对其进行如下修改:

exports.getInfo = (req, res) => {
    var $mac = req.body.mac;
    return new Promise((resolve, reject) => {
        request({ uri: `${process.env.API_HOST}/${$mac}` })
            .then((cpe) => resolve(JSON.parse(cpe).data))
            .catch((error) => reject(error));
    });

}
 module.exports = {
    let general = {};
     general.getInfo = ($mac) => {
        return new Promise((resolve, reject) => {
            request({ uri: `${process.env.API_HOST}/${$mac}` })
                .then((count) => resolve(JSON.parse(count).data))
                 .catch((error) => reject(error));
        });
     } }
删除箭头功能应该可以解决您的错误

现在,无论您想在哪里访问导出,只需键入要用于给定导出的变量名。在您的情况下,我们可以将其称为info

var info = require('./yourJSfileName.js')
这需要您安装require软件包(无双关语)


然后可以使用:
info.theFunctionName()
调用导出的函数。我希望这会有所帮助,如果您愿意,我可以更深入地了解。

老实说,我还没有找到最佳实践指南。我读过一篇文章,很清楚应该怎么做

如果我们以您的代码为例,我们可以对其进行如下修改:

exports.getInfo = (req, res) => {
    var $mac = req.body.mac;
    return new Promise((resolve, reject) => {
        request({ uri: `${process.env.API_HOST}/${$mac}` })
            .then((cpe) => resolve(JSON.parse(cpe).data))
            .catch((error) => reject(error));
    });

}
 module.exports = {
    let general = {};
     general.getInfo = ($mac) => {
        return new Promise((resolve, reject) => {
            request({ uri: `${process.env.API_HOST}/${$mac}` })
                .then((count) => resolve(JSON.parse(count).data))
                 .catch((error) => reject(error));
        });
     } }
删除箭头功能应该可以解决您的错误

现在,无论您想在哪里访问导出,只需键入要用于给定导出的变量名。在您的情况下,我们可以将其称为info

var info = require('./yourJSfileName.js')
这需要您安装require软件包(无双关语)


然后可以使用:
info.theFunctionName()
调用导出的函数。我希望这会有所帮助,如果您愿意,我可以更深入。

从模块导出代码中删除
()=>
。请告诉我们您在哪里导入和使用导出功能。我怀疑您想要导出函数,而不是包含函数的对象,在这种情况下,您需要从模块导出代码中删除
()=>
。请向我们展示导入和使用导出函数的位置。我怀疑您想要导出函数而不是包含函数的对象,在这种情况下,您应该执行
module.exports=getInfo
我尝试了您的第一个选项,但仍然出现此错误
Route.post()需要回调函数,但得到了一个[object Undefined]
getInfo
?我尝试了您的第一个选项,我仍然得到这个错误。post()需要一个回调函数,但是得到了一个[object Undefined]its
getInfo