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.

9voto

Jimmy Punkte 33423

Sie können Ihre Funktionen in globalen Variablen unterbringen, aber es ist besser, Ihr Toolskript in ein Modul zu verwandeln. Das ist wirklich nicht allzu schwer - fügen Sie einfach Ihre öffentliche API an die exports Objekt. Werfen Sie einen Blick auf Das Export-Modul von Node.js verstehen für einige weitere Details.

3voto

user11153 Punkte 7691

Datei einbinden und im angegebenen (nicht-globalen) Kontext ausführen

fileToInclude.js

define({
    "data": "XYZ"
});

main.js

var fs = require("fs");
var vm = require("vm");

function include(path, context) {
    var code = fs.readFileSync(path, 'utf-8');
    vm.runInContext(code, vm.createContext(context));
}

// Include file

var customContext = {
    "define": function (data) {
        console.log(data);
    }
};
include('./fileToInclude.js', customContext);

2voto

Hani Punkte 193

Der sauberste Weg IMO ist die folgende, in tools.js:

function A(){
.
.
.
}

function B(){
.
.
.
}

module.exports = {
A,
B
}

Dann brauchen Sie in app.js nur die tools.js wie folgt: const tools = require("tools");

1voto

Weijing Lin Punkte 555

Sie können einfach nur require('./filename') .

Beispiel.

// file: index.js
var express = require('express');
var app = express();
var child = require('./child');
app.use('/child', child);
app.get('/', function (req, res) {
  res.send('parent');
});
app.listen(process.env.PORT, function () {
  console.log('Example app listening on port '+process.env.PORT+'!');
});

// file: child.js
var express = require('express'),
child = express.Router();
console.log('child');
child.get('/child', function(req, res){
  res.send('Child2');
});
child.get('/', function(req, res){
  res.send('Child');
});

module.exports = child;

Bitte beachten Sie dies:

  1. Sie können PORT nicht in der untergeordneten Datei abhören, nur das übergeordnete Express-Modul hat einen PORT-Listener
  2. Das Kind benutzt den "Router", nicht der Elternteil Express moudle.

1voto

Jone Polvora Punkte 1947

Node arbeitet auf der Grundlage von Commonjs-Modulen und neuerdings auch von esm-Modulen. Grundsätzlich sollten Sie Module in separaten .js-Dateien erstellen und von Importen/Exporten (module.exports und require) Gebrauch machen.

Javascript im Browser funktioniert je nach Anwendungsbereich unterschiedlich. Es gibt den globalen Bereich, und durch Clojures (Funktionen innerhalb anderer Funktionen) haben Sie private Bereiche.

Exportieren Sie also in Node Funktionen und Objekte, die Sie in anderen Modulen verwenden werden.

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