2017-05-06 19 views
2

我有這個在節點上運行的Web應用程序。代碼在ES5中。 現在我將代碼更改爲ES6並使用Babel Transpilation。 Transpilation運行良好,但我提示以下錯誤:在啓動服務器:TypeError:f在節點中的Babel轉譯後不是函數

*TypeError: _routes2.default.init is not a function* 

server.js代碼是指routes.js。

server.js代碼:

import express from 'express'; 
import routes from './routes'; 

let app = express(); 
routes.init(app); //Issue line 
app.set('view engine','vash'); 

app.listen(4000, function(){ 
    console.log("server listening on port 4000"); 
}); 

routes.js代碼:

import homeController from '../controllers/homeController'; 

class routes{ 
    init(app){ 
     app.get('/', homeController.index);  
    } 
} 
export default routes; 

Transpiled server.js代碼:

'use strict'; 

var _express = require('express'); 

var _express2 = _interopRequireDefault(_express); 

var _routes = require('./routes'); 

var _routes2 = _interopRequireDefault(_routes); 

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 

var app = (0, _express2.default)(); 
_routes2.default.init(app); 
app.set('view engine', 'vash'); 

app.listen(4000, function() { 
    console.log("server listening on port 4000"); 
}); 

Transpiled routes.js代碼:

'use strict'; 

Object.defineProperty(exports, "__esModule", { 
     value: true 
}); 

var _createClass = function() { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); 

var _homeController = require('../controllers/homeController'); 

var _homeController2 = _interopRequireDefault(_homeController); 

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 

var routes = function() { 
     function routes() { 
       _classCallCheck(this, routes); 
     } 

     _createClass(routes, [{ 
       key: 'init', 
       value: function init(app) {       
         app.get('/', _homeController2.default.index);       
       } 
     }]); 

     return routes; 
}(); 

exports.default = routes; 

爲了清楚起見,我省略了許多代碼。我在這個錯誤上打了很多個小時。任何幫助將不勝感激。 init函數在routes2中可用,但它錯誤說init不是函數。

服務器通過運行以下命令開始:node server.js

回答

1

routes.init不是static method,但是你把它作爲這樣。無論是創建routes類型的對象,並對其調用init,或標記功能靜態的,就像這樣:

class routes{ 
    static init(app){ 
     app.get('/', homeController.index);  
    } 
} 
+0

呀。這是問題。從來不知道JS有靜態方法的概念。我只是使用了ES5的代碼,在這裏我使用module.exports中的IIFE導出了'routes'。非常感謝。 靜態方法來與ES6? – Boney

+0

課程作爲一個整體在ES6中是新的。這包括靜態方法。 – phihag

相關問題