2017-01-18 1 views
0

Ich möchte mehrere Argumente in modules.exports übergeben. Mein Code geht in etwa so:Übergabe mehrerer Argumente im Exportmodul

folgende Datei ist ein Code-Snippet index.js

var express  = require('express'); 
var app   = express(); 
var number = 100; 
require('./app/routes')(app, number); // pass our application into our routes 

Es folgt ein Code-Snippet routes.js

module.exports = function(app, number){ 

app.get('/api/control', function(req,res){ 
    res.send("done"); 
}); 

app.post('/api/control', function(req,res){ 
    console.log(number); 
    console.log(req.body); 
    res.send("done"); 

}); 

} 

Das Problem ist, wenn überhaupt ein POST-Anfrage wird gemacht, console.log(number); druckt undefined am Terminal, wo, wie wenn ich drucke, wenn ich number durch app in console.log() ersetze, druckt es alle Funktionen von app.

Ich habe auch versucht, die Positionen von app und number zu wechseln, dann warf es einen Fehler, der app nicht existiert.

+0

ist 'require ('./ app/routes')' wirklich mit Ihrer 'app.js'? Ist es nicht eine andere Datei? –

+0

versuchen Sie dies zu sehen, was passiert? 'require ('./ app/routes') (app, 100);' – ricky

+0

@pierre, entschuldigung, das war ein Tippfehler –

Antwort

1

Wenn Sie Einfach die Variable übergeben, warum nicht einfach zum App-Objekt hinzufügen.

var express  = require('express'); 
var app   = express(); 
app.myNumber = 100; 
require('./app/routes')(app); // pass our application into our routes 

Dann in den routes.js:

module.exports = function(app){ 

app.get('/api/control', function(req,res){ 
    res.send("done"); 
}); 

app.post('/api/control', function(req,res){ 
    console.log(app.myNumber); 
    console.log(req.body); 
    res.send("done"); 

}); 

} 

Edited:

Der folgende Code funktioniert Variablen weitergeben müssen:

app.js:

var express  = require('express'); 
var app   = express(); 
var number = 100; 
require('./app/routes')(app, number); 

Um die Variable innerhalb der Funktion zu übergeben, müssen Sie sie binden.

module.exports = function(app, number){ 

    app.get('/api/control', function(req,res){ 
    res.send("done"); 
    }); 

    app.post('/api/control', function(req,res){ 
     console.log(number); 
     console.log(req.body); 
     res.send("done"); 

    }.bind(number)); 

} 
+0

Ich habe das vorübergehend gemacht, aber ich suchte nach einer besseren Lösung, da ich nichts zu "app" -Objekt hinzufügen möchte (den ursprünglichen Zustand von * app * beibehalten), für Code-Snippet habe ich nur die Variable verwendet, aber in meinem eigentlichen Projekt verwende ich ein großes Objekt.aber noch werde ich 1up schlagen, während Ihre Antwort das Problem löst :) –

+0

Der Grund, den Sie undefined erhalten, ist, weil der zweite Parameter von app.get() eine anonyme Funktion ist. Es weiß nur nicht, was die Variable 'Zahl' ist. Ich habe das Update in meiner obigen Antwort hinzugefügt. –

+0

amit danke für die Antwort, aber das Hauptproblem ist nicht app.get(), Problem ist module.exports, ich bin nicht in der Lage, mehrere argumnets dort zu übergeben –

0

Tun Sie das nicht! Verwenden Sie den Router von Express.js und vielleicht das Paket Consign auf einmal mehrere Routendatei passieren ...

const express = require('express'); 
 
const router = express.Router(); 
 

 

 
/* GET login page. */ 
 
router.get('/', function(req, res, next) { 
 
    res.render('login'); 
 
}) 
 
router.post('/', function (req, res, next){ 
 
    if (req.body.code === '***') { 
 
     res.send({ 
 
      status: 'OK', 
 
      token: *** 
 
     }); 
 
    } else { 
 
     res.send('KO'); 
 
    } 
 
}) 
 

 
module.exports = router;

Dann:

const loginRoute = require('./routes/login'); 
 
app.use('/', loginRoute);

+0

Ich benutze Winkel auf der Browserseite , und es behandelt das ganze Routing, ich serviere nur index.html, ich benutze "app" in der http-Anfrage, um mein API aufzurufen, das auf einem Kindprozess läuft, also brauche ich keinen Router in expresJS, mein probelem ist in module.exports und übergibt mehrere Argumente darin –

+0

Vielleicht haben Sie einen FP-Ansatz dafür, verwenden Sie eine Zwischenfunktion, die den Parameter nehmen und Ihre Funktion mit Ihrer expressJS-Logik zurückgeben wird? – Mech45

Verwandte Themen