自动导出节点函数的最佳做法

时间:2018-04-18 20:13:11

标签: javascript node.js express

目标

我是节点的新手,我正在尝试编写代码,我不必跟踪导出我在该文件中编写的单个函数。

的步骤

我有一个功能

general.js

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

function 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 = {
    getInfo
};

我如何调整它以便我的功能自动导出?

我试过

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]

问题

如何继续进行调试?

我现在对任何建议持开放态度。

任何提示/建议/帮助都将非常感谢!

4 个答案:

答案 0 :(得分:1)

所以,你想在一个文件中写一些函数,它们都应该只是因为它们是函数而被导出?不可能我害怕。您必须明确导出。

答案 1 :(得分:1)

也许只是将你的函数直接放到exports对象中:

module.exports = {
  getInfo(req, res) {
    //...
  },
  // type here ...
};

或者你转到Typescript,然后你就可以:

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

答案 2 :(得分:1)

我通常这样做:

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));
    });

}

答案 3 :(得分:1)

说实话,我还没有找到最佳做法的指南。我读过的帖子以及应该如何完成的内容非常明确this one.

如果我们以您的代码为例,我们可以像这样修改它:

 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));
        });
     } }

删除箭头功能可解决您的错误。

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

var info = require('./yourJSfileName.js')

这要求您安装 require 包(无意图)。

然后您可以使用:info.theFunctionName();来调用导出的函数。我希望有所帮助,如果你想要我,我可以更深入。