1229 Stimmen

Wie kann ich in Node.js Funktionen aus anderen Dateien "einbinden"?

Nehmen wir an, ich habe eine Datei namens app.js. Ziemlich einfach:

var express = require('express');
var app = express.createServer();
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.get('/', function(req, res){
  res.render('index', {locals: {
    title: 'NowJS + Express Example'
  }});
});

app.listen(8080);

Was ist, wenn ich eine Funktion in "tools.js" habe. Wie würde ich sie importieren, um sie in apps.js zu verwenden?

Oder...soll ich aus "tools" ein Modul machen und es dann voraussetzen? << Scheint schwer zu sein, ich mache lieber den einfachen Import der tools.js Datei.

1751voto

masylum Punkte 21581

Sie können jede beliebige js-Datei benötigen, Sie müssen nur angeben, was Sie freilegen möchten.

// tools.js
// ========
module.exports = {
  foo: function () {
    // whatever
  },
  bar: function () {
    // whatever
  }
};

var zemba = function () {
}

Und in Ihrer App-Datei:

// app.js
// ======
var tools = require('./tools');
console.log(typeof tools.foo); // => 'function'
console.log(typeof tools.bar); // => 'function'
console.log(typeof tools.zemba); // => undefined

348voto

Udo G Punkte 11672

Wenn Sie trotz aller anderen Antworten immer noch traditionell arbeiten wollen einschließen. einer Datei in einer node.js-Quelldatei, können Sie dies verwenden:

var fs = require('fs');

// file is included here:
eval(fs.readFileSync('tools.js')+'');
  • Die leere Zeichenkettenverkettung +'' ist notwendig, um den Inhalt der Datei als String und nicht als Objekt zu erhalten (Sie können auch .toString() wenn Sie es vorziehen).
  • Die Funktion eval() kann nicht innerhalb einer Funktion verwendet werden und muss innerhalb des globalen Bereichs aufgerufen werden, da sonst keine Funktionen oder Variablen zugänglich sind (d.h. Sie können keine include() Nutzenfunktion oder etwas Ähnliches).

Bitte beachten Sie, dass es sich in den meisten Fällen um schlechte Praxis und Sie sollten stattdessen ein Modul schreiben . Es gibt jedoch seltene Situationen, in denen die Verschmutzung Ihres lokalen Kontexts/Namensraums das ist, was Sie wirklich wollen.

Update 2015-08-06

Bitte beachten Sie auch, dass dies nicht funktioniert mit "use strict"; (wenn Sie sich in "Strenger Modus" ), weil Funktionen und Variablen definiert in der "importierten" Datei kann nicht erreicht werden durch den Code, der den Import durchführt. Der strikte Modus erzwingt einige Regeln, die in neueren Versionen des Sprachstandards definiert sind. Dies kann ein weiterer Grund sein, um vermeiden die hier beschriebene Lösung.

231voto

Nick Panov Punkte 2497

Sie benötigen weder neue Funktionen noch neue Module. Sie müssen lediglich das aufgerufene Modul ausführen, wenn Sie den Namespace nicht verwenden wollen.

in tools.js

module.exports = function() { 
    this.sum = function(a,b) { return a+b };
    this.multiply = function(a,b) { return a*b };
    //etc
}

in app.js

oder in einer anderen .js-Datei wie myController.js :

anstelle von

var tools = require('tools.js') die uns dazu zwingen, einen Namespace zu verwenden und Tools wie tools.sum(1,2);

können wir einfach aufrufen

require('tools.js')();

und dann

sum(1,2);

In meinem Fall habe ich eine Datei mit Controllern ctrls.js

module.exports = function() {
    this.Categories = require('categories.js');
}

und ich kann Categories in jedem Kontext als öffentliche Klasse nach require('ctrls.js')()

140voto

Jayaprakash G Punkte 2517

Zwei js-Dateien erstellen

// File cal.js
module.exports = {
    sum: function(a,b) {
        return a+b
    },
    multiply: function(a,b) {
        return a*b
    }
};

Haupt js-Datei

// File app.js
var tools = require("./cal.js");
var value = tools.sum(10,20);
console.log("Value: "+value);

Konsolenausgabe

Value: 30

85voto

YouBee Punkte 1813

Zwei Dateien erstellen, z.B. app.js y tools.js

app.js

const tools= require("./tools.js")

var x = tools.add(4,2) ;

var y = tools.subtract(4,2);

console.log(x);
console.log(y);

tools.js

 const add = function(x, y){
        return x+y;
    }
 const subtract = function(x, y){
            return x-y;
    }

    module.exports ={
        add,subtract
    }

Ausgabe

6
2

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X