gpt4 book ai didi

javascript - Nodejs变量作用域问题

转载 作者:行者123 更新时间:2023-12-01 03:11:37 26 4
gpt4 key购买 nike

我有一个nodejs路线,我试图使用npm-youtube-dl将url下载为mp3。我有一个下载目录,我用 chokidar 监视添加的文件,添加文件时我将链接保存到文件,下载完成后我调用一个函数,该函数应该使用 res.download 响应下载 URL。当调用 sendURL 函数时,我可以清楚地看到之前保存的 url 在我 console.log 时未定义...知道我在这里做错了什么/如何解决这个问题吗?我猜这是一个 js 变量范围问题?

我的代码:

var express = require('express');
var router = express.Router();
var yt = require('youtube-dl');
var fs = require('fs');
var path = require('path');
var chokidar = require('chokidar');
var downloadPath = '';

var watcher = chokidar.watch('./downloads', {
ignored: '/^[^.]+$|\.(?!(part)$)([^.]+$)/',
persistent: true
});

watcher.on('add', function(path) {
console.log('added: ', path);
this.downloadPath = path;
console.log('saved', this.downloadPath);
});

/*
router.get('/', function(req, res, next) {
next();
});
*/
router.get('/', function(req, res) {

var url = 'https://soundcloud.com/astral-flowers-music/bella-flor';
var options = ['-x', '--audio-format', 'mp3', '-o', './downloads/%(title)s.%(ext)s'];
var video = yt.exec(url, options, {}, function exec(err, output) {

if (err) { throw err; }
console.log(output.join('\n'));
sendUrl();
});

function sendUrl() {
console.log(this.downloadPath);
//res.download(this.downloadPath);
}

});



module.exports = router;

最佳答案

您滥用了。如果您想在函数中使用 downloadPath 变量,请删除它们前面的 this.this.downloadPaththis 引用的对象上查找名为 downloadPath属性,该属性与您的模块不同-全局变量。

更多:How does the "this" keyword work?

<小时/>

即使如此,您仍然依赖于在任何客户端请求您的 / 路由之前调用您的 add 回调,并且您将返回最后一个 add 回调分配给 downloadPath 的值。我对你正在做的事情了解不够,不知道这是否正确,但缺乏协调似乎是有问题的。

关于javascript - Nodejs变量作用域问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45797252/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com