Работа в Node.js, я разделяю один рабочий фрагмент на два фрагмента, которые дают тот же результат. Рабочий фрагмент имеет инструкцию require и находится в корневом каталоге. Разделенные два сегмента работают на первом этапе корневого каталога, но второй этап завершается с ошибкой и сообщает, что библиотека eTrade не может быть найдена. Вот инструкция require.требуют, чтобы путь работал в корне, но не в другом месте
var etrade = require('./lib/etrade');
При выполнении из server.js
в корневом каталоге, то все работает, но в расколотом проекте, захватив переменный появится в index.js
в папке маршрутов и не работает. На стороне клиента сообщается, что библиотека eTrade не найдена. Здесь есть что-то, что я не понимаю, возможно, о том, как разрешить спецификацию пути в требовании.
В то же время, я сделал работу с использованием глобальной переменной, которую я передаю от app.js
в корневом каталоге до index.js
в папке маршрутов. Я могу продолжить развитие таким образом, но было бы намного лучше, если бы я понял, как сделать первый вариант работы.
отредактируйте этот вопрос и покажите иерархию файлов, а затем покажите нам, как вы объедините файлы? какие инструменты вы использовали, и где был выход
server.js работает в корне и работает очень хорошо. app.js работает в корне и является частью A объединенной системы и работает. index.js запускается в папке root/routes и является частью B объединенной системы и терпит неудачу. root/lib/eTrade содержит модули eTrade.
Рабочий фрагмент (server.js) открывает окно подтверждения на сайте eTrade, и пользователь копирует/вставляет обратно код подтверждения, который возвращается в консоль на стороне сервера. Отказоустойчивый фрагмент, который представляет собой комбинацию A и B, отказывается передать переменную (код подтверждения) в B, и поскольку она сообщает о сбое в поиске библиотеки eTrade, я думаю, что проблема заключается в пути в требовании, который is
var etrade = require ('./ lib/etrade');
Объединенная система выполняет первую часть задачи, но не передает эту переменную во вторую часть задачи, и я думаю, это потому, что переменная в B находится вне области видимости.
Здесь работает фрагмент кода:
/*
* Module dependencies
*/
const port = 3000
var express = require('express')
, stylus = require('stylus')
, nib = require('nib')
, logger = require('morgan')
, routes = require('./routes/index')
, users = require('./routes/users')
,app = express()
function compile(str, path) {
return stylus(str)
.set('filename', path)
.use(nib());
}
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
//app.use('/', routes);
//app.use('/users', users);
app.use(logger('dev'));
app.use(stylus.middleware(
{ src: __dirname + '/public'
, compile: compile
}
));
app.use(express.static(__dirname + '/public'))
//from expressSite
// from readme
var etrade = require('./lib/etrade');
var configuration =
{
useSandbox : true, // true if not provided
key : '', //actual value deleted
secret : '' //actual value deleted
}
var et = new etrade(configuration);
//here we send the user a credentials link
et.getRequestToken(
function(authorizationUrl) {
// Your service requires users, who will need to visit
// the following URL and, after logging in and
// authorizing your service to access their account
// data, paste the E*TRADE provided verification
// code back into your application.
app.get('/', function (req, res) {
res.render('AuthApp',
{ authLink : authorizationUrl }
)
});
console.log("AuthorizationURL " + authorizationUrl + " "); },
function(error) {
console.log("Error encountered while attempting " +
"to retrieve a request token: " +
error);
}
); //end getRequestToken
//user sends confirmation code and we get acesss token
app.get('/users/sendcode', function (req, res) {
console.log('verification code is '+req.query.vCode);
//end get verification code
et.getAccessToken(req.query.vCode,
function() {
// Your app can start using other E*TRADE API now
// begin main interaction
// this is where we should land first after oath
// hand it over to the db page?
//et.listAccounts();
//console.log(a);
res.render('ETQuery');
console.log('thread entered getAccessToken function')
// console.log(AccessToken)
},
function(error) {
console.log("Error encountered while attempting " +
"to exchange request token for access token: " +
error);
}
);
})
app.listen(port, (err) => {
if (err) {
return console.log('something bad happened', err)
}
console.log(`CIA is listening to the FSB on ${port}`)
})
Вот новая часть А-код в app.js в корне. Вы можете увидеть, как я исправил его, чтобы использовать глобальный.
var etrade = require('./lib/etrade');
var configuration =
{
useSandbox : true, // true if not provided
key : '', //actual value deleted
secret : '' //actual value deleted
}
var et = new etrade(configuration);
// here we send the user a credentials link
et.getRequestToken(
function(authorizationUrl) {
// Your service requires users, who will need to visit
// the following URL and, after logging in and
// authorizing your service to access their account
// data, paste the E*TRADE provided verification
// code back into your application.
// app.get('/', function (req, res) {
// res.render('index',
// { authLink : authorizationUrl }
// )
// });
console.log("AuthorizationURL is " + authorizationUrl + " ");
global.ETauthUrl = authorizationUrl;
},
function(error) {
console.log("Error encountered while attempting " +
"to retrieve a request token: " +
error);
}
); //end getRequestToken
Но часть B не фиксирует токен. Что странно, так это то, что сообщается о сбое в поиске библиотеки eTrade, в то время как эта библиотека нигде не упоминается в B. В рабочем фрагменте я не могу передать токен за пределами server.js, но я могу сообщить об этом на стороне сервера после того, как пользователь вставляет его и нажимает кнопку отправки на стороне клиента. Вот В.
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res) {
res.render('index',
{ authLink : ETauthUrl }
)
});
Это работает только из-за глобальной переменной.
у нас есть код? –
отредактируйте вопрос и покажите иерархию файлов, а затем покажите нам, как вы объедините файлы? какие инструменты вы использовали, и где был выход –