javascript - 如何在 require 中使用原型(prototype)?

标签 javascript node.js restify

我想在 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());

但是我收到没有方法“中间件”错误

如何在 main.js 中要求和使用中间件?

我正在使用Restify框架。

最佳答案

But I'm getting has no method 'middleware' error

这是因为您的 Kc 对象没有 middleware 属性。它有一个包含 middlewareprototype 属性。

如果 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 具有默认的logoutadmin 选项。然后使用 opts 而不是 optionsextend 函数看起来有点像这样:

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)
];

关于javascript - 如何在 require 中使用原型(prototype)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28265548/

相关文章:

javascript - Fineuploader 在用户响应文件提交后取消上传

javascript - 无法在node js中使用 sleep 或暂停

javascript - 如何显示 "npm outdated"current != wanted lines only?

node.js - 使用 Restify 提供单页 Angular 应用程序

Restify:设置默认格式化程序

javascript - 为什么 WebSocket.onmessage 事件不会触发?

javascript - 如何在 Angularjs 中重构闭包中的重复代码?

javascript - colorbox 在不关闭弹出窗口的情况下刷新父窗口

node.js - 在链式 Promisified 函数内创建 MongoDB 文档

node.js - Restify CORS 不适用于 POST 请求