TypeError:object不是Node.js函数

时间:2013-12-09 17:27:52

标签: javascript node.js

我正在Lynda.com上进行Node.js基本训练......

关注视频,但我在终端中收到此错误。

  

“TypeError:object不是函数”

node_modules /飞行/ index.js

var count = 0,
    destinations = [];

var Flight = function () {
        this.data = {
        number : null,
        origin: null,
        destination: null,
        departs: null,
        arrives: null,
        actualDepart: null,
        actualArrive: null
    };

    this.fill = function (info) {
            for(var prop in this.data) {
        if(this.data[prop] !== 'undefined') {
            this.data[prop] = info[prop];
        }
    }
    };

        this.triggerDepart = function () {
            this.data.actualDepart = Date.now();
        };
        this.triggerArrive = function () {
            this.data.actualArrive = Date.now();
        };
        this.getInformation = function () {
            return this.data;
        };
};  

exports.create = function (info) {
    var instance = new Flight();    
    instance.fill(info);

    count++;
    if(destinations.indexOf(info['destination']) <0) {
        destinations.push(info['destination']);
    }
    return instance;
};

exports.getCount = function() {
    return count;
};

exports.getDestinations = function () {
    return destinations;
};

路由/ index.js

/*
 * GET home page.
 */

 var flight= require('../node_modules/flight');
 var flight1 = flight({
     number :1,
     origin: 'LAX',
     destination : 'DCA',
     departs: '9AM',
     arrives:'4PM'
 });

 var flight2 = flight({
     number : 2,
     origin: 'LAX',
     destination : 'PDX',
     departs: '10AM',
     arrives: '12PM'
 });

exports.flight1 = function(req, res){
  res.json(flight1.getInformation());
};

exports.flight2 = function(req, res){
  res.json(flight2.getInformation());
};

app.js

/**
 * Module dependencies.
 */

var express = require('express');
var routes = require('./routes');
var http = require('http');
var path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' === app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);

app.get('/flight1', routes.Flight1);

app.get('/flight2', routes.Flight2);

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

不确定如何解决问题。

1 个答案:

答案 0 :(得分:5)

使用flight.create代替flight()

 var flight= require('../node_modules/flight');
 var flight1 = flight.create({
     number :1,
     origin: 'LAX',
     destination : 'DCA',
     departs: '9AM',
     arrives:'4PM'
 });

 var flight2 = flight.create({
     number : 2,
     origin: 'LAX',
     destination : 'PDX',
     departs: '10AM',
     arrives: '12PM'
 });

您可以通过简单导出第一个模块来缓解此问题,如下所示:

exports = function (info) {
    var instance = new Flight();    
    instance.fill(info);

    count++;
    if(destinations.indexOf(info['destination']) <0) {
        destinations.push(info['destination']);
    }
    return instance;
};

exports.getCount = function() {
    return count;
};

exports.getDestinations = function () {
    return destinations;
};

然后您可以使用flight(),因为您可以使用上面的.create,但您也可以使用flight.getCountflight.getDestinations,而无需使用实例。