如何在 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 中引入插件模块?的主要内容,如果未能解决你的问题,请参考以下文章