更新

根据Epiqueras的回答,我研究了如何处理导入。首先,/models/index.js正在导出已命名的导出。这是代码:

'use strict';

import { readdirSync } from 'fs'
import {
    basename,
    extname,
    resolve
} from 'path';


//
// Using module.exports here as a bit of a hack
// to allow for member imports in the form of
// import { Constructor } from "~/models"
module.exports = readdirSync(__dirname)             // Get contents of current directory
                   .filter(f => f !== 'index.js')   // Exclude the index file
                   .map(f => resolve(__dirname, f)) // Resolve the complete module file path
                   .map(f => require(f).default)    // Require the module
                   .reduce((prev, next) => {        // Reduce the array of modules to a hash of Module.name = Module
                       prev[next.name] = next;
                       return prev;
                    }, {});

我是从requireindex项目派生的,该项目对我不起作用(无疑是用户错误)。从那以后我发现,如果我直接导​​入该类,即import Patron from '../models/patron',那么一切都会按预期进行。

至此,我的项目中还有其他五个模型,都可以使用上面的代码很好地导出。 Patron是唯一没有的。并且,正如原始问题中所述,如果我将名称更改为其他名称,则上面的代码将毫无问题地导出该新名称。

幸运的是,我现在有一个解决方法。希望我能弄清楚为什么它使名字Patron令人窒息。

原始问题

我用JavaScript编写了一个简单的类:
'use strict'

export default class Patron {
  constructor(props) {
    this.props = props;
  }

  create() {
    // In my actual code I make a network call,
    // simplified this just to see if anyone can get it to return a promise
    return Promise.resolve(this);
  }
}

为了完整起见,下面是我如何使用构造函数的示例:
'use strict'

import { Router } from 'express';
import { Patron } from '../models';

const PatronRouter = Router();

PatronRouter.post('/patrons', (req, res) => {
  let patron = new Patron({ name: 'John Doe' });
  let promise = patron.create().then(response => res.send(response);
}

export PatronRouter;

这是我的经验:
  • Patron是有效的构造函数,初始化实例
  • 没有错误
  • patronPatron的实例
  • patron.propsundefinded
  • patron.create作为实例方法
  • 存在
  • patron.create返回undefined

  • 这对我完全没有意义:如果我更改类的名称,一切正常。 我不了解Patron名称在哪里/如何/为什么引起问题?

    其他一些注意事项:
  • 运行节点(6.9.2)
  • Express(最新)应用程序的一部分,尝试从Router执行此代码
  • 在启用了es2015预设的情况下使用Babel 6

  • 有什么想法吗?

    最佳答案

    您正在将类导出为默认导出,但是将其作为命名导出导入。

    试试这个:import Patron from '../models;

    或将导出更改为命名的导出:export class Patron

    关于javascript - JavaScript:有人能解决这个问题或解释为什么不起作用吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42036766/

    10-09 23:13