【发布时间】:2018-01-16 02:48:33
【问题描述】:
我有一个项目以 ES5.1 开始,后来我将其更改为支持 ES6,所以我使用的是 async-await,让...
现在我需要有类似实例的模块/对象。
我发现 this 帖子解释了这个过程,但是......
当我这样做时:
'use strict';
let _ = require('lodash');
var mappings;
function SafeRequestHandler(reqMappings) {
if (!(this instanceof SafeRequestHandler)) {
return new SafeRequestHandler((reqMappings));
}
mappings = reqMappings;
}
function safeHandleReq(req, res) {
try {
let pair = _.find(mappings, {'url': req.url});
return pair.handler(req, res);
} catch (err) {
console.log(err);
}
}
SafeRequestHandler.prototype.safe = safeHandleReq;
module.exports = SafeRequestHandler;
但现在,每次我这样做:
var handler = require('../util/safeRequestHandler');
let handlerMappings = [
{
url: def.party_create,
handler: partyCreate
},
{
url: def.party_modify,
handler: partyModify
},
{
url: def.party_get,
handler: partyGet
}
];
var handle = new handler(handlerMappings).safe;
我得到this.mappings 替换为SafeRequestHandler 例如。这不是一个实例。
所以我尝试了定义处理程序的 ES6 方法:
'use strict';
let _ = require('lodash');
class SafeRequestHandler {
constructor(reqMappings) {
this.mappings = reqMappings;
}
safeHandleReq(req, res) {
try {
let pair = _.find(this.mappings, {'url': req.url});
return pair.handler(req, res);
} catch (err) {
console.log(err);
}
}
}
并像这样实例化它:
let handlerMappings = [
{
url: def.party_create,
handler: partyCreate
},
{
url: def.party_modify,
handler: partyModify
},
{
url: def.party_get,
handler: partyGet
}
];
let handle = new SafeRequestHandler(handlerMappings).safeHandleReq;
..但是这样我什至无法在safeHandleReq(...) 中联系mappings。 this 未定义,mappings 未定义
我想我只是没有完全理解基本原理,所以请您纠正并解释这两种方法有什么问题?
谢谢!
【问题讨论】:
-
没有 ES6 方式应该可以正常工作。
-
好吧,正如我所说.. 我无法到达“映射”,一切都未定义
-
不,没关系。你得到什么错误?
标签: javascript node.js ecmascript-6 ecmascript-5 multiple-instances