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
呀。這是問題。從來不知道JS有靜態方法的概念。我只是使用了ES5的代碼,在這裏我使用module.exports中的IIFE導出了'routes'。非常感謝。 靜態方法來與ES6? – Boney
課程作爲一個整體在ES6中是新的。這包括靜態方法。 – phihag