Tor

Ich bin neu in Node und versuche, einen Code so zu schreiben, dass ich nicht den Export aller Funktionen verfolgen muss, die ich in diese Datei geschrieben habe.


Schritte

Ich habe eine Funktion

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

Wie würde ich es anpassen, damit meine Funktionen automatisch exportiert werden?


Ich habe es versucht

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

Ich bekam immer

Fehler: Route.post () erfordert eine Rückruffunktion, hat aber ein [Objekt undefiniert]

Wie kann ich das weiter debuggen?

0
code8888 18 Apr. 2018 im 23:13

4 Antworten

Beste Antwort

Vielleicht setzen Sie Ihre Funktionen einfach direkt in das Exportobjekt:

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

Oder Sie wechseln zu Typescript und können Folgendes tun:

export function getInfo(req, res) {
  //...
}
1
Jonas Wilms 18 Apr. 2018 im 20:18

Um ehrlich zu sein, habe ich keinen Leitfaden für Best Practices gefunden. Der Beitrag, den ich gelesen habe und in dem klar war, wie Dinge zu tun sind, ist this.

Wenn wir Ihren Code als Beispiel nehmen, können wir ihn folgendermaßen ändern:

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

Durch Entfernen der Pfeilfunktion sollte Ihr Fehler behoben werden.

Wo immer Sie auf Ihren Export zugreifen möchten, geben Sie einfach den Variablennamen ein, den Sie für den angegebenen Export verwenden möchten. In Ihrem Fall können wir es info nennen:

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

Dies setzt voraus, dass Sie das Paket require installiert haben (keine Wortspiele vorgesehen).

Dann können Sie Folgendes verwenden: info.theFunctionName();, um Ihre exportierte Funktion aufzurufen. Ich hoffe das hilft, ich kann tiefer gehen, wenn du willst, dass ich es tue.

1
ZombieChowder 18 Apr. 2018 im 20:23

Sie möchten also einige Funktionen in eine Datei schreiben, und sie sollten alle exportiert werden, nur weil sie Funktionen sind? Tut mir leid geht nicht. Sie müssen explizit exportieren.

1
Ben West 18 Apr. 2018 im 20:16

Normalerweise mache ich das so:

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

}
1
pigeontoe 18 Apr. 2018 im 20:22