【问题标题】:Running http module in express route - NodeJS在快速路由中运行 http 模块 - NodeJS
【发布时间】:2020-10-10 22:24:21
【问题描述】:

我想在我的快速路由中呈现一些 HTML 文本。我知道其中一个选项是使用 npm-needle 模块,但我不确定我们是否有任何方法可以在定义的同一路由中使用 npm-express 和 npm-http。

我想要的是这样的:

var http = require("http");
var express = require("express");
var app = express();

app.get("/", function (req, res) {
  var params = req.params;
  var url = req.query["url"];
  let handleRequest = (request, response) => {
    response.writeHead(200, {
      "Content-Type": "text/plain",
    });
    response.write("Hi There! " + url);
    response.end();
  };
});
app.listen(5000);
//http.createServer(handleRequest).listen(8000); ---> not using this in the code

这种类型的东西可能吗?谢谢!

【问题讨论】:

  • 不,您展示的内容是不可能的。您不能在路由中定义handleRequest(),然后在其他地方使用它。如果需要,您可以在路由处理程序中使用res.send("some text");,但您必须更好地描述您正在尝试做什么。完全删除 http.createServer() 行。您的 http 服务器已经在 app.listen() 内部创建。
  • 好的,所以我关注了stackoverflow.com/questions/29328028/…,但我无法在浏览器中呈现我的url 变量。 res.send(`

    {{url}}

    `)
  • 如果您在该问题中尝试过类似的内容,则必须显示您在问题中尝试过的实际代码。您现在在问题中的内容与该问题中的内容完全不同。你看到混淆了一堆东西。您可以使用 res.send('<h1>' + url + '</h1>'); 发送您的 URL。 {{url}} 语法涉及使用模板引擎来呈现您的页面,这完全是另外一回事。您不能只是从随机问题中获取一小段代码并将它们插入到您的项目中。您需要了解事情的实际运作方式。
  • 如果你写了一个明确的问题(在你的问题中,而不是在 cmets 中),它解释了你想要做什么,也许人们可以帮助你解决最初的问题。
  • 感谢@jfriend00 的帮助!这是非常基本的东西,但我有点不知所措,下次我会记住这一点!

标签: node.js express http npm needle.js


【解决方案1】:

我不明白为什么你的路由中有这个handleRequest 函数,因为你可以在你的路由中使用这个函数的reqresinside。

如果你想在你的路由中传递 html,你可以像这样发回一个 html 文件:

const path = require('path');

app.get("/", function (req, res) {
    res.sendFile(path.join(__dirname + '/index.html'));
});

或者您可以像这样从您的路线中直接发回 html-tags:

app.get("/", function (req, res) {
    res.send('<h1>Text</h1>')
});

当然,您可以使用模板字符串等来显示您的数据。

【讨论】:

    【解决方案2】:

    您可以通过request npm 包轻松完成。

    const request = require('request');
    
    app.get("/", function (req, res) {   
      request('http://www.google.com', function (error, response, body) {
        console.error('error:', error); // Print the error if one occurred
        console.log('statusCode:', response && response.statusCode); // Print the response 
      
        console.log('body:', body); // Print the HTML for the Google homepage.
    });
    

    【讨论】:

    • 由于各种原因,该请求包已被弃用。人们可能不应该用request() 编写新代码。有很多 alternatives 完全支持 Promise(这就是当今编写异步代码的方式)。
    • 他显然是个初学者。我确信他不会发布企业软件。学习还是不错的。
    • 其实没有。不利于学习。一个人应该学习如何使用 Promise 进行异步编程,如果你要学习一个新的库,它可能是一个不被弃用的库,一个支持你可以在项目中继续使用很长时间的 Promise 的库这实际上可能很重要。我个人会推荐got() library,但在我之前的替代链接中还有其他的。
    • Dude 正在为一个 http 请求监听两个不同的端口,但是 bluebird 是一个不错的选择。
    • 现在 node.js 中内置了 Promise,为什么你认为这里需要 Bluebird?
    猜你喜欢
    • 2018-09-27
    • 2016-11-06
    • 2013-08-10
    • 2018-11-08
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    相关资源
    最近更新 更多