2017-06-23 1 views
1

Ich habe diese Funktion, die ich in fast allen meine Nodejs-Controller verwenden.Ich versuche, meine erste "globale" Funktion für meine Nodejs-Controller zu schreiben

Die Funktion ist in der Datei ../global/daysBetween.js

"use strict"; 
module.exports.daysBetween = (date1, date2) => { 
    var ONE_DAY = 1000 * 60 * 60 * 24 
    var date1_ms = date1.getTime() 
    var date2_ms = date2.getTime() 
    var difference_ms = Math.abs(date1_ms - date2_ms) 
    return Math.round(difference_ms/ONE_DAY) 
} 

Zuerst dachte ich darüber in global aber viele Beispiele hier auf Stackoverflow sagt, das ist eine schlechte Idee setzen. So

Ich habe versucht, es in die Steuerungen enthalten, die es verwenden:

"use strict"; 
var mongoose = require('mongoose'); 
var daysBetween = require('../global/daysBetween'); 
exports.newBooking = function(req, callback) { 
    console.log("Days Between: " + daysBetween(bookingRecord.checkin,bookingRecord.checkout)); 
} 

Aber ich bekomme diese Fehlermeldung:

TypeError: daysBetween is not a function 

Was mache ich falsch?

Und sollte ich es in jedem Controller mit erfordern? Oder wäre es besser, es auf globaler Ebene zu deklarieren?

Dies ist, was exportiert wird:

console.log(require('../global/daysBetween')); 
return; 

{ daysBetween: [Function] } 
+0

'console.log (require ('../ global/daysBetween'));' sehen und Post, was exportiert wird. –

+0

@DiegoZoracKy Ich aktualisierte die Frage mit '{daysBetween: [Function]}' – torbenrudgaard

Antwort

4

Sie diese exportieren:

{ 
    daysBetween:function... 
} 

Versuchen:

"use strict"; 

module.exports = (date1, date2) => { 
    var ONE_DAY = 1000 * 60 * 60 * 24 
    var date1_ms = date1.getTime() 
    var date2_ms = date2.getTime() 
    var difference_ms = Math.abs(date1_ms - date2_ms) 
    return Math.round(difference_ms/ONE_DAY) 
} 

Entfernen Sie die daysBetween Eigenschaft.

Exporte ist ein Objekt. Wenn Sie .someField hinzufügen, fügen Sie diesem Objekt eine Eigenschaft hinzu. Wenn Sie nur eine Funktion exportieren möchten, müssen Sie das Export-Objekt durch eine eigene Funktion ersetzen.

module.exports =()=>{ return 'exports is now a function'}; 

module.exports.func =()=>{ return 'exports is an object with the function "func"'}; 

Tutorial on module.exports

+0

Danke Cheloid - du hattest Recht. Alles funktioniert jetzt und ich kann endlich einige nette "globale" Funktionen schreiben. Nebenfrage: Wann würden Sie dem globalen Bereich 'global.myFunction()' Funktionen hinzufügen oder würden Sie das komplett vermeiden? – torbenrudgaard

+0

Ich habe das nie gemacht, ich hatte es nicht nötig, aber ich vermeide normalerweise die Verwendung globaler/statischer Funktionen. – Cheloide

+2

@torbenrudgaard Vergessen Sie den "globalen" Weg und gehen Sie vorwärts mit 'require()', wo es benötigt wird. Der beste Pfad, dem Sie folgen können, ist ein echtes Modul dafür zu erstellen und es auf npm zu veröffentlichen. Überprüfen Sie: https://www.npmjs.com/search?q=difference+days –

Verwandte Themen