如何在 require 中使用原型?
How to use prototype with require?
我想在 Node 模块中导入以下代码:
Kc.prototype.middleware = function(options) {
options.logout = options.logout || '/logout';
options.admin = options.admin || '/';
var middlewares = [];
middlewares.push( Setup );
middlewares.push( PostAuth(this) );
middlewares.push( AdminLogout(this, options.admin) );
middlewares.push( GrantAttacher(this) );
middlewares.push( Logout(this, options.logout) );
return middlewares;
};
我在 main.js 中需要这个:
var kc = require('connect-kc');
server.use(kc.middleware());
但我收到 has no method 'middleware'
错误
如何在我的 main.js 中要求和使用中间件?
我正在使用 Restify 框架。
But I'm getting has no method 'middleware'
error
那是因为您的 Kc
对象没有 middleware
属性。它有一个 prototype
属性 有 middleware
.
如果 Kc
是一个函数,您可能想像这样使用它:
var Kc = require('connect-kc');
var kc = new Kc();
server.use(kc.middleware());
如果Kc
不是函数,那么:
var Kc = require('connect-kc');
server.use(Kc.prototype.middleware());
...但我 强烈 建议您不要给它一个名为 prototype
的 属性,因为这非常具有误导性。函数实例上的 prototype
属性 引用当 new TheFunctionName
.
创建实例时该函数将分配给实例的对象
旁注 1:
此代码可疑:
options.logout = options.logout || '/logout';
options.admin = options.admin || '/';
像那样伸手去改变来电者的对象一般不是个好主意。相反,通常有一个函数可以在实例之间复制属性(通常称为 extend
),然后:
var opts = extend({}, defaults, options);
...其中 defaults
具有默认的 logout
和 admin
选项。然后使用 opts
而不是 options
。 extend
函数看起来像这样:
function extend(target) {
Array.prototype.slice.call(arguments, 1).forEach(function(arg) {
Object.keys(arg).forEach(function(key) {
target[key] = arg[key];
});
});
return target;
}
旁注 2:
如果您愿意,您可以更简洁地创建 middlewares
数组,并且 (主观地) 更清楚:
var middlewares = [
Setup,
PostAuth(this),
AdminLogout(this, options.admin),
GrantAttacher(this),
Logout(this, options.logout)
];
我想在 Node 模块中导入以下代码:
Kc.prototype.middleware = function(options) {
options.logout = options.logout || '/logout';
options.admin = options.admin || '/';
var middlewares = [];
middlewares.push( Setup );
middlewares.push( PostAuth(this) );
middlewares.push( AdminLogout(this, options.admin) );
middlewares.push( GrantAttacher(this) );
middlewares.push( Logout(this, options.logout) );
return middlewares;
};
我在 main.js 中需要这个:
var kc = require('connect-kc');
server.use(kc.middleware());
但我收到 has no method 'middleware'
错误
如何在我的 main.js 中要求和使用中间件?
我正在使用 Restify 框架。
But I'm getting
has no method 'middleware'
error
那是因为您的 Kc
对象没有 middleware
属性。它有一个 prototype
属性 有 middleware
.
如果 Kc
是一个函数,您可能想像这样使用它:
var Kc = require('connect-kc');
var kc = new Kc();
server.use(kc.middleware());
如果Kc
不是函数,那么:
var Kc = require('connect-kc');
server.use(Kc.prototype.middleware());
...但我 强烈 建议您不要给它一个名为 prototype
的 属性,因为这非常具有误导性。函数实例上的 prototype
属性 引用当 new TheFunctionName
.
旁注 1:
此代码可疑:
options.logout = options.logout || '/logout';
options.admin = options.admin || '/';
像那样伸手去改变来电者的对象一般不是个好主意。相反,通常有一个函数可以在实例之间复制属性(通常称为 extend
),然后:
var opts = extend({}, defaults, options);
...其中 defaults
具有默认的 logout
和 admin
选项。然后使用 opts
而不是 options
。 extend
函数看起来像这样:
function extend(target) {
Array.prototype.slice.call(arguments, 1).forEach(function(arg) {
Object.keys(arg).forEach(function(key) {
target[key] = arg[key];
});
});
return target;
}
旁注 2:
如果您愿意,您可以更简洁地创建 middlewares
数组,并且 (主观地) 更清楚:
var middlewares = [
Setup,
PostAuth(this),
AdminLogout(this, options.admin),
GrantAttacher(this),
Logout(this, options.logout)
];