node.js - NodeJS-引用错误: wagner is not defined

标签 node.js

我根本没有使用nodejs的经验,我正在学习。我有一个代码,我正在测试它并给出以下错误,但我不明白为什么:

1) 第 3 部分评估测试“首先” Hook : ReferenceError:瓦格纳未定义 在对象。 (fx.js:2:31) 在对象。 (dependency.js:3:10) 在上下文中。 (测试.js:29:20)

2) 第 3 部分评估测试“毕竟” Hook : 类型错误:无法读取未定义的属性“close” 在上下文中。 (测试.js:65:11)

以下是该问题涉及的程序:

test.js --------------

var assert = require('assert');
var express = require('express');
var fs = require('fs');
var status = require('http-status');
var superagent = require('superagent');
var wagner = require('wagner-core');

var URL_ROOT = 'http://localhost:3000';
var PRODUCT_ID = '000000000000000000000001';

describe('Part 3 Assessment Tests', function() {
  var server;
  var app;
  var succeeded = 0;
  var finalCharge;

  var Category;
  var Config;
  var fx;
  var Product;
  var Stripe;
  var User;

  before(function() {
    app = express();

    // Bootstrap server
    models = require('./models')(wagner);
    dependencies = require('./dependencies')(wagner);

    // Make models available in tests
    var deps = wagner.invoke(function(Category, fx, Product, Stripe, User, Config) {
      return {
        Category: Category,
        fx: fx,
        Product: Product,
        Stripe: Stripe,
        User: User,
        Config: Config
      };
    });
...

dependency.js -------------

var wagner = require('wagner-core');
var fs = require('fs');
var fx = require('./fx')(wagner);
var Stripe = require('stripe');

module.exports = function(wagner) {
  var stripe = 

  // TODO: Make Stripe depend on the Config service and use its `stripeKey`
  // property to get the Stripe API key.
  wagner.factory('Stripe', function() {
    return Stripe(Config.stripeKey);
  });

  wagner.factory('fx', fx);

  wagner.factory('Config', function() {
    return JSON.parse(fs.readFileSync('./config.json').toString());
  });

  var Config = wagner.invoke(function(Config) {
      return Config;
   });
}; 

fx.js --------------------------

var superagent = require('superagent');
var _ = require('underscore')(wagner);

module.exports = function(Config) {
...
};

我认为我不应该有任何问题,因为 wagner 是在 test.js 上定义的,并作为参数传递给 dependency.js,并且它将它传递给 fx.js。

1-你能告诉我代码中有什么问题吗? 2-第二个错误,我没有提示为什么会发生。

请帮忙

最佳答案

在您的 dependency.js 中,在 fx 定义中,您不需要传递 wagner 作为参数,因为那里不存在该变量:

var fx = require('./fx');

正如我所见,您已经定义了 Config 工厂,并且不需要将其分配给变量来使用它,因为 wagner 会自动注入(inject)您的“Config”工厂,允许您访问它:

wagner.factory('Stripe', function(Config) {
    return Stripe(Config.stripeKey);
});

...

wagner.factory('Config', function() {
   return JSON.parse(fs.readFileSync('./config.json').toString());
});

然后在你的 fx.js 中,当你想使用 Config 参数时,你只需传递它:

module.exports = function(Config) {
    var url = 'http://openexchangerates.org/api/latest.json?app_id=' +
    Config.openExchangeRatesKey;
 ...
}

如果您想在任何其他文件中使用“Config”工厂,您应该这样做:

[auth.js]
function setupAuth(User, Config, app) {
    ...
}

关于node.js - NodeJS-引用错误: wagner is not defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36192281/

相关文章:

javascript - 为什么 socket.post() 比 socket.emit() 慢 [太慢了]

javascript - 在node.js中强制x客户端等待客户端y的回调的最佳实践

javascript - 如何导出 .then() block 之外的数据(SuperAgent 库)?

javascript - 无法销毁 Express 创建的 JavaScript 中的 cookie

node.js - Jenkins 上的 node-sass 安装失败

javascript - 使用 PM2 和 child_process.exec 无需每次都打开新的命令提示符

node.js - 在 knex 事务中抛出自定义错误导致 api 崩溃

javascript - 从 NodeJS 重复调用 Rest Endpoint

node.js - 表达、收听多条路线

node.js - 如何在StrongLoop(LoopBack)中获取Response对象