试着写我的第一个"全球"我的nodejs控制器的功能

时间:2017-06-23 13:13:01

标签: javascript node.js

我在几乎所有的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] }

1 个答案:

答案 0 :(得分:4)

您正在导出此内容:

{
    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后,您需要在此对象中添加属性;如果你只想导出一个函数,你必须用你自己的函数替换exports对象。

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

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

Tutorial on module.exports