JavaScript:有人能让它工作或者解释为什么它不工作吗';T
更新 根据epiqueras的回答,我查看了如何处理导入。首先,JavaScript:有人能让它工作或者解释为什么它不工作吗';T,javascript,ecmascript-6,es6-class,Javascript,Ecmascript 6,Es6 Class,更新 根据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
/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;
}, {});
我从一个不适合我的项目中得到了这个结果(毫无疑问是用户错误)。我后来发现,如果我直接导入类,即,从“../models/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.create
返回用户创建
未定义
用户的名称在哪里/如何/为什么会导致问题
还有几点需要注意:
- 运行节点(6.9.2)
- 作为Express(最新)应用程序的一部分,试图从
路由器执行此代码
- 在启用
es2015
预设的情况下使用Babel 6
想法?您将类导出为默认导出,但将其导入为命名导出
尝试以下操作:从“../models
导入用户
或者将导出更改为命名导出:导出类用户
您可以显示物品的导入端吗?您是否有任何其他用户
符号?您是否查看了Babel生成的代码以查看生成的代码的确切外观?您的代码似乎有效,但您的表达是错误的:patron.props=defined
和patron.create=>Promise.
。请注意,如果您使用ajax调用,则不应返回Promise.resolve()
,而应实际将该调用包装为新承诺((接受,拒绝)=>{your code here})
@jfriend00扩展了导入/使用示例。我在任何地方都没有找到任何其他用户
符号,我也不完全确定我是否知道如何查看巴贝尔生成的代码。此时,我正在通过npm start
学习/调试,启动脚本为nodemon index.js--exec babel node
调用new-Patron
不太可能成功,因为Patron
作为默认导出导出,但作为命名导出导入,这意味着它可能是未定义的。@jfriend00它并不能解决我的问题,但它确实确认了命名一个类用户
并不是一个普遍的错误。我仍然无法理解为什么它会在我的项目中失败。@sellmeadog-您可以放心,Patron
在Javascript中不是保留字,也不是node.js中的预定义符号。我猜您自己的代码或正在导入的某些代码中有另一个符号冲突。@Epiquer根据我对原始问题的更新,您的回答帮助我找到了解决问题的方法,这就是我接受它的原因。仍然很好奇为什么我的models/index.js
会被Patron
阻塞,但我可以稍后再弄清楚。@sellmeadog您是否尝试过console.logging您的reduce代码?我认为,当您更改它的名称时,它工作的原因与models目录中文件的字典顺序有关。用户被放入该数组的顺序可能会导致它失败。在readDirSync、filter、map、map和reduce之后记录,并查看如何处理用户。