javascript - 类型错误 : f is not a function after Babel Transpilation in Node

标签 javascript node.js ecmascript-6 babeljs

我在 Node.js 上运行了这个网络应用程序。代码在 ES5 中。 现在我将代码更改为 ES6 并使用 Babel Transpilation。 转译运行良好,但在启动服务器时出现以下错误:

*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;

转译后的 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");
});

转译的 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

最佳答案

routes.init 不是 static method ,但您可以这样使用它。创建一个 routes 类型的对象并对其调用 init,或者将函数标记为静态,如下所示:

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

关于javascript - 类型错误 : f is not a function after Babel Transpilation in Node,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43817225/

相关文章:

javascript - 在繁忙的 JavaScript 代码期间页面未更新

javascript - 导入模块只是为了运行它

angular - typescript /Angular/ES6 : can I finally let `hasOwnProperty()` die in for loops?

node.js - 部署到heroku后,后端的req.query在React前端变成了json,如何修复?

JavaScript:任何人都可以让它工作或解释为什么它不起作用吗?

javascript - 如何将数组元素拆分为多个 tr 语句

javascript - 从 JS 调用 html 中的图标

javascript - 如何使用 jQuery 停止 Vimeo 视频

node.js - 调用 gRPC 服务器不会在 Node 中返回预期数据

node.js - 无法连接到 Vagrant 中的 Node.js