如何在 node.js 中引入插件模块?

Posted

技术标签:

【中文标题】如何在 node.js 中引入插件模块?【英文标题】:How to require plug-in module in node.js? 【发布时间】:2013-02-01 12:30:56 【问题描述】:

我正在使用 Mocha 框架和 SuperAgent 模块测试服务器(不是我做的),但是我需要测试服务器 Ouath 协议。 我找到superagent-oauth 模块是为了提出签名请求。

但是,当我需要该模块时,我收到以下错误

TypeError: Object.keys 在非对象上调用

我的代码,遵循 superagent-oauth repo 中的自述文件,它是

var superagent = require('superagent');
var log = require('./log.js');
var Oauth = require('node-oauth');
var oauth = new Oauth(..);

require('superagent-oauth')(superagent);

然后在运行测试时,我得到了 TypeError: Object.keys called on non-object。

当我使用超级代理时,我只是这样做

var superagent = require('superagent');
agent = superagent.agent();

但我不知道如何使用/需要 superagent-oauth 模块。那么正确的方法是什么? 谢谢

添加了跟踪

2) Login 'Username:Password' test: POST 使用有效的登录名登录 具有有效登录名的 AM: TypeError: Object.keys 在非对象上调用 在 Function.keys (本机) 在 Request.query (/home/maldo/testingAM/node_modules/superagent-oauth/superagent-oauth.js:22:23) 在上下文。 (/home/maldo/testingAM/loginUserPass.js:74:6) 在 Test.Runnable.run (/home/maldo/node_modules/mocha/lib/runnable.js:196:15) 在 Runner.runTest (/home/maldo/node_modules/mocha/lib/runner.js:343:10) 在 Runner.runTests.next (/home/maldo/node_modules/mocha/lib/runner.js:389:12) 在下一个(/home/maldo/node_modules/mocha/lib/runner.js:269:14) 在 Runner.hooks (/home/maldo/node_modules/mocha/lib/runner.js:278:7) 在下一个(/home/maldo/node_modules/mocha/lib/runner.js:226:23) 在 Runner.hook (/home/maldo/node_modules/mocha/lib/runner.js:246:5) 在 process.startup.processNextTick.process._tickCallback (node.js:244:9)

我总是在代理的 .query() 状态中多次在文件 loginUserPass 中获得此跟踪。当我在 OauthAM.js 中添加 superagent-ouath 要求时会发生这种情况。

【问题讨论】:

你应该发布整个堆栈跟踪 【参考方案1】:

您是否已经完成npm install 从 npm 检索所有模块依赖项? superagent 的依赖项似乎不可用?

使用npm install superagent --save 安装新的依赖项(并放入package.json 文件中)。

这样您将获得超级代理模块所需的所有依赖项。

【讨论】:

是的,我的 package.json 有所有的依赖项并且已经安装,即使它们已经被删除并重新安装了 @Maldo:似乎存在依赖关系。测试如何失败?在您的堆栈跟踪中,它显示 loginUserPass.js 第 74 行第 6 行。 >it('logins in to the AM with a valid login', function (done) > agent2 > .post(route.server) > .query(route.loginPost) > .send('userId=example1') > .send('userPass=1234') > .end(function (req, res) >//https://localhost:8443/AM/?0-1.IFormSubmitListener-form >//console.log(util.inspect(res)); > >res.should.have.property('statusCode').that.equals(200); >res['redirects'][0].should.have.string(route.server+route.userPage); >res['text'].should.contain('example1@hotmail.com'); >res['text'].should.contain('Log out'); > done(); > ); > ); 第 74 行是 .query() @Maldo:您能否编辑您的问题以包含该问题并指出第 74 行第 6 行在哪里?【参考方案2】:

在使用npm init 创建的新项目上安装 vows 时遇到相同的错误消息。此 GitHub 问题讨论建议将以下行添加到项目的 package.json 文件(即您要创建的项目,而不是您要安装的项目):

 "dependencies": 

这为我解决了这个问题。当然,您提到您在 package.json 中安装了依赖项,因此此答案更适合可能搜索错误消息的其他人。

https://github.com/stephenplusplus/grunt-bower-install/issues/9

【讨论】:

以上是关于如何在 node.js 中引入插件模块?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 TypeScript 导入自定义 node.js 插件模块

node.js的模块化介绍

讲座node.js npm插件开发与发布

Node.js:如何创建付费节点模块?

node.js笔记——模块的开发

[Node.js]操作redis