更新
根据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
是一个有效的构造函数,初始化实例没有错误patron
是Patron
patron.props
是undefinded
patron.create
作为实例方法存在patron.create
返回undefined
这对我来说完全没有意义:如果我更改课程的名称,一切正常。我不明白姓名的位置/方式/原因{{ 1}}导致问题?
其他几点说明:
Patron
Router
预设的情况下使用Babel 6 思想?
答案 0 :(得分:3)
您将该类导出为默认导出,但将其作为命名导出导出。
试试这个:import Patron from '../models
;
或者将导出更改为指定的导出:export class Patron