试图为我的nodejs控制器编写我的第一个“全局”函数

我有几乎所有的nodejs控制器都使用了这个函数。

该函数在../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) } 

首先,我想到把它放到global但在这里stackoverflow上的很多例子说这是一个坏主意。

所以我试图把它包含到使用它的控制器中:

 "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)); } 

但是我得到这个错误:

 TypeError: daysBetween is not a function 

我究竟做错了什么?

我应该把它包括在每个控制器的要求? 还是最好在全球范围内宣布呢?

这是导出的内容:

 console.log(require('../global/daysBetween')); return; { daysBetween: [Function] } 

你正在导出这个:

 { daysBetween:function... } 

尝试:

 "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) } 

删除daysBetween属性。

出口是一个对象。 当你添加.someField ,你正在向这个对象添加一个属性; 如果只想导出一个函数,则必须用自己的函数replaceexports对象。

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

关于module.exports的教程