2016-07-05 5 views
1

So habe ich nenne einen Controller mit einer alsWie kann ich eine Controller-Methode in einem anderen Controller in Knoten

controller1.js

router.get('/:id/:field', function(req,res){ 
    var regex = /action|protocol|ip|port|direction|dip|dport|signature/; 
    if (regex.test(req.params.field)){ 
     get(req,res,function(r){ 
     var field = req.params.field; 
     res.status(200).send(r[field]); 
     }); 
    } else { 
     res.status(404).send("Signature Field Does Not Exist"); 
    } 
}); 

function get(req, res, cb){ 
    MongoClient.connect(url, function(err, db) { 
    if (err){ 
     console.error("Could not connect to database: %s",err); 
     res.sendStatus(500); 
    } else { 
     var _id = req.params.id 
     var collection = db.collection("signatures"); 
     var uniqueID = {"_id":_id}; 
     var cursor = collection.find(uniqueID); 
     cursor.hasNext(function (err, r) { 
      if (err) {console.log(err);} 
      else { 
      cursor.next(function(err,r) { 
       if (r == null){ 
       res.status(404).send("Signature not found"); 
       } else { 
        cb(r); 
        db.close(); 
       } 
      });  
      }  
     }); 
    } 
    }); 
} 
module.exports = router 

definierte Methode und ich kann anrufen es von außen über localhost. Ich möchte beide in einem anderen Controller verwenden können. So in einer anderen Datei

controller2.js

var controller1 = require("./controller1.js"); 
router.get('/', function(req,res){ 
    controller1.get(req,res,cb(r){ 
     res.status(200).send(r); 
    }); 
}); 

Wenn ich versuche, in controller2.js bekommen zu anrufen bekomme ich Fehler: Route.get() erfordert Callback-Funktionen, sondern bekam eine [object Object]. Ich bin sicher, es ist kein Datenbankfehler oder Verbindungsfehler irgendeiner Art, nur ein Fehler beim Aufrufen der Funktion controller1 von controller2. Ich habe versucht, den Header in controller1 Änderung der Funktion sein

router.get = function(req,res,cb){ 
    .... 
}); 

Dies macht die get in controller1 nicht in der Lage zu nennen.

Antwort

0
If you still want to follow this approach the solution is 
router.get('/:id/:field', function(req,res){ 
    var regex = /action|protocol|ip|port|direction|dip|dport|signature/; 
    if (regex.test(req.params.field)){ 
     get(req,res,function(r){ 
     var field = req.params.field; 
     res.status(200).send(r[field]); 
     }); 
    } else { 
     res.status(404).send("Signature Field Does Not Exist"); 
    } 
}); 

var get=function(req, res, cb){ 
    MongoClient.connect(url, function(err, db) { 
    if (err){ 
     console.error("Could not connect to database: %s",err); 
     res.sendStatus(500); 
    } else { 
     var _id = req.params.id 
     var collection = db.collection("signatures"); 
     var uniqueID = {"_id":_id}; 
     var cursor = collection.find(uniqueID); 
     cursor.hasNext(function (err, r) { 
      if (err) {console.log(err);} 
      else { 
      cursor.next(function(err,r) { 
       if (r == null){ 
       res.status(404).send("Signature not found"); 
       } else { 
        cb(r); 
        db.close(); 
       } 
      });  
      }  
     }); 
    } 
    }); 
} 
module.exports.router = router 
module.exports.get = get 


In controller2 
var controller1 = require("./controller1.js"); 
router.get('/', function(req,res){ 
    controller1.get(req,res,cb(r){ 
     res.status(200).send(r); 
    }); 
}); 
will work 

nur einige Änderungen machen accordinly wo immer Sie controller1 von Router-Objekt erfordert nur, dass

require('./cotroller1').router 
zu

konvertieren
1

Um Ihren Code DRY zu behalten, können Sie alle wiederkehrenden Funktionen in Hilfsmodulen speichern.

controllers 
├── helpers 
    └── index.js 
├── controller1.js 
└── controller2.js 

Im „index.js“ Helfer-Modul Sie Ihre Funktion wie diese können sein::

so etwas wie diese Struktur kann

exports.yourFunction = function(args){ 
... 
}; 

Und Sie können es in dem Aufruf Controller wie folgt:

var helpers = require("./helpers"); 
... 
helpers.yourFunction(); 

Sie können auch andere verwandte Antworten in diesem Thema finden:

Javascript - Best way to structure helpers functions in NodeJS

Verwandte Themen