gpt4 book ai didi

javascript - 快速 js 路由上的传递函数不起作用

转载 作者:行者123 更新时间:2023-11-30 15:15:50 24 4
gpt4 key购买 nike

我刚刚接触 Node 和 Express。试图在我的路线上传递一个函数而不是文本,但它似乎不起作用。我刚刚查看了那里的文档,他们只提到了带有 req.send() 方法的文本。我试图通过这里的功能,但它不工作。还有 alert() 不像这样工作 req.send(alert('Hello world')) 它说警报没有定义或类似的东西。

**更新:**我正在尝试用 express 和 Node 执行这个库 https://github.com/przemyslawpluta/node-youtube-dl

我想在这里做这样的传递函数

function blaBla() {
var youtubedl = require('youtube-dl');
var url = 'http://www.youtube.com/watch?v=WKsjaOqDXgg';
// Optional arguments passed to youtube-dl.
var options = ['--username=user', '--password=hunter2'];
youtubedl.getInfo(url, options, function(err, info) {
if (err) throw err;

console.log('id:', info.id);
console.log('title:', info.title);
console.log('url:', info.url);
console.log('thumbnail:', info.thumbnail);
console.log('description:', info.description);
console.log('filename:', info._filename);
console.log('format id:', info.format_id);
});
}

app.get('/', (req, res) => {
res.send(blaBla());
})

**代替**

app.get('/', function (req, res) {
res.send('Hello World!')
})

我希望你们理解我的问题。

最佳答案

res.send()需要一个字符串参数。所以,你必须传递一个字符串。

如果您希望浏览器执行一些 Javascript,那么您发送的内容取决于来自浏览器的请求类型。

如果是浏览器页面加载请求,则浏览器需要 HTML 响应,您需要发回 HTML 页面字符串。如果您想将 Javascript 作为该 HTML 页面的一部分执行,那么您可以嵌入 <script>页面内的标记,然后在 <script> 内包含 Javascript 文本标记和浏览器将在解析页面并运行脚本时执行该 Javascript。

如果路由是为了响应脚本标记请求,那么您可以将 Javascript 文本作为字符串返回,并且您需要确保 MIME 类型适本地表明它是一个脚本。

如果路由是响应 Ajax 调用,那么这完全取决于 Ajax 调用的调用者期望什么。如果他们需要一个脚本并打算将文本作为 Javascript 执行,那么您也可以将 Javascript 文本作为字符串发送。如果他们需要 HTML 并将其作为 HTML 处理,那么您可能需要嵌入 <script>在该 HTML 中标记以便执行 Javascript。

在你的例子中:

response.send(blaBla());

如果 blaBla() 就可以了根据上述关于调用者期望的注释,同步返回格式正确的字符串。如果您需要进一步的帮助,那么您需要向我们展示或描述请求是如何在浏览器中发起的,并向我们展示 blaBla() 的代码。功能,因为问题可能出在 blaBla() 中功能。

你的问题有很多问题:

  1. 你显示 req.send(alert('Hello world'))在你的问题的文本中。 .send()方法属于 res对象,而不是 req对象(第二个参数,而不是第一个)。所以,那将是 res.send() , 不是 req.send() .

  2. 在同一段代码中,没有 alert()在 node.js 中运行,但您试图立即执行它并使用 .send() 发送结果.由于多种原因,这行不通。

  3. 您的第一个代码块使用 blaBla()只要 blaBla() 就可以正常工作返回符合调用者期望的正确格式的字符串。如果这不起作用,那么 blaBla() 有问题正在这样做,我们需要查看该代码。

  4. 您的第二个代码块之所以有效,是因为您发送了一个字符串,调用者可以处理该字符串。


现在更新您已经显示了 blaBla() 的代码.

您的 blaBla() 代码不返回任何东西,它是异步的,所以它不能返回结果。因此,您不能使用结构 response.send(blaBla()); .没有办法让它工作。

相反,您需要做一些不同的事情,例如:

blaBla(response);

然后修改blaBla()调用response.send(someTextValue)当响应字符串已知时。

function blaBla(res) {
var youtubedl = require('youtube-dl');
var url = 'http://www.youtube.com/watch?v=WKsjaOqDXgg';
// Optional arguments passed to youtube-dl.
var options = ['--username=user', '--password=hunter2'];
youtubedl.getInfo(url, options, function(err, info) {
if (err) {
res.status(500).send("Internal Error");
} else {
console.log('id:', info.id);
console.log('title:', info.title);
console.log('url:', info.url);
console.log('thumbnail:', info.thumbnail);
console.log('description:', info.description);
console.log('filename:', info._filename);
console.log('format id:', info.format_id);
// construct your response here as a string
res.json(info);
}
});
}

另请注意,错误处理不使用 throw因为这在异步回调中真的没有用。

关于javascript - 快速 js 路由上的传递函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44476683/

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