我根本没有使用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/