Javascript 如何在nodejs中的另一个文件中获取嵌套回调结果?
所以我的API代码在这个文件API.js中 api.jsJavascript 如何在nodejs中的另一个文件中获取嵌套回调结果?,javascript,node.js,express,callback,Javascript,Node.js,Express,Callback,所以我的API代码在这个文件API.js中 api.js var express = require('express'); var Vimeo = require('vimeo').Vimeo; var lib = new Vimeo('dfdfdfdfdfdfd', 'WDIt+kEVudfghjklkjhgfdfghjkjhgfMaG9X3Ml', 'jhjhjhjhjhjhgfg'); var app = express(); app.listen(9999); var result
var express = require('express');
var Vimeo = require('vimeo').Vimeo;
var lib = new Vimeo('dfdfdfdfdfdfd', 'WDIt+kEVudfghjklkjhgfdfghjkjhgfMaG9X3Ml', 'jhjhjhjhjhjhgfg');
var app = express();
app.listen(9999);
var results =
app.get('/api', function (req, res) {
lib.request(/*options*/{
// This is the path for the videos contained within the staff picks channels
path: '/channels/staffpicks/videos',
// This adds the parameters to request page two, and 10 items per page
query: {
page: 1,
per_page: 2,
fields: 'uri,name,description,duration,created_time,modified_time'
}
}, /*callback*/function (error, body, status_code, headers) {
if (error) {
// console.log('error -------------------------------------');
// console.log(error);
} else {
console.log(body); //how to get this in server.js
res.send(JSON.stringify(body['data'])); //how to get this in server.js
}
});
});
console.log("Server is listening");
module.exports = {
results: results,
}
server.js
var api = require('./vimeo/api.js');
var a = api.results;
//blah blah
console.log(a);// how to get calback data from api.js function here?
}));
var api = require('./vimeo/api.js');
module.exports = function(data){
var a = api.results;
console.log(data); //your async data
}
如何访问server.js中api.js中可用的console.log值?您可以在server.js中导出函数,并在可用时从api.js传递异步数据 server.js
var api = require('./vimeo/api.js');
var a = api.results;
//blah blah
console.log(a);// how to get calback data from api.js function here?
}));
var api = require('./vimeo/api.js');
module.exports = function(data){
var a = api.results;
console.log(data); //your async data
}
和内部api.js
//after you receive the data
else {
var serverModule = require('./server');
serverModule(data); //call the method
res.send(JSON.stringify(body['data']));
}
将你的app.get()
调用包装成Promise
如下:
var results =
new Promise(resolve => app.get('/api', function (req, res) {
...
}));
然后替换console.log(body)代码>带有:
resolve(body);
现在,results
是一个Promise
,因此在解决以下问题后,它将在server.js中可用:
var api = require('./vimeo/api.js');
api.results.then((a) => {
console.log(a);
});
假设api.js
和server.js
都在同一个进程上运行,您可以向server.js
添加一个函数,通过将它包装在一个可以调用钩子函数的函数中,来截获写入process.stdout
的任何内容,该钩子函数需要返回写入process.stdout
的原始参数,这样它就不会中断console.log()
我如何使用它的一个例子是截取任何记录到控制台的内容并将其写入文件。它不需要在您想要截取console.log()
的任何文件中包含任何进一步的代码,因为它可以跨写入同一进程上运行的process.stdout
的任何文件工作
function hookStdOut(hook => {
process.stdout.write = (write => {
return (...args) => {
args[0] = hook[args[0]]
write.apply(process.stdout, args)
}
})(process.stdout.write)
}
hookStdOut(chunk => {
// access whatever was being written to stdout and process
// you cannot use console.log within this function
// because it will result in an infinite loop since
//console.log writes to process.stdout
// return the chunk so it will be written back to process.stdout
return chunk
})
你能发布server.js的全部内容吗?这是我在server.js中的全部内容。我更喜欢快速方式。很抱歉最初没有标记为express。@Mike“express way”是什么意思?