javascript - 如何在 POST 方法中使用 dns.lookup() ?

标签 javascript node.js validation url

我从事 URL 缩短项目。我想使用 dns.lookup 方法。单独使用它时它对我有用。一旦我在 POST 方法中使用它,它就不再工作并返回 false,即使地址有效。你能帮我吗?谢谢你! 这是整个项目:https://url-shortener-lm.glitch.me 这是问题代码:

app.post('/api/shorturl/new', (req, res, next) => {
  var originalURL = req.body.url;
  dns.lookup(originalURL, (err, address, family) => {
    if (err) {
      res.json({
        originalURL: originalURL,
        shortenedURL: "Invalid URL"
      });
    } else {
      var shortenedURL = Math.floor(Math.random() * 100000).toString();

      var data = new Model({
        originalURL: originalURL,
        shortenedURL: shortenedURL
      });

      data.save(function(err, data) {
        if (err) {
          return console.error(err);
        }
      });

      res.json({
        originalURL: originalURL,
        shortenedURL: shortenedURL
      })
    };
  });
});

最佳答案

dns.lookup() 希望您仅向其传递主机名,例如 www.google.com,而不是网址。您可以在 doc 中看到代码示例它只是传递 "example.com"

您可以从 url 中解析出主机名。您可以使用原始的 Node.js url 解析功能或较新的标准 URL 对象(浏览器和 Node.js 都通用)。我在这里展示了新的 URL 对象:

const URL = require('url').URL;

app.post('/api/shorturl/new', (req, res, next) => {

  const originalURL = req.body.url;
  const urlObject = new URL(originalURL);

  dns.lookup(urlObject.hostname, (err, address, family) => {
    if (err) {
      res.json({
        originalURL: originalURL,
        shortenedURL: "Invalid URL"
      });
    } else {
      var shortenedURL = Math.floor(Math.random() * 100000).toString();

      var data = new Model({
        originalURL: originalURL,
        shortenedURL: shortenedURL
      });

      data.save(function(err, data) {
        if (err) {
          return console.error(err);
        }
      });

      res.json({
        originalURL: originalURL,
        shortenedURL: shortenedURL
      })
    };
  });
});
<小时/>

查看 URL 对象能够从 URL 中解析出什么内容,例如:

http://www.example.com:3000/somePath/somePage.html

这是一个简单的测试应用程序及其提供的输出:

const {URL} = require('url');

let originalURL = "http://www.example.com:3000/somePath/somePage.html"
const urlObject = new URL(originalURL);

console.log(urlObject.hostname);
console.log(urlObject);

这显示了这个输出:

www.example.com
URL {
  href: 'http://www.example.com:3000/somePath/somePage.html',
  origin: 'http://www.example.com:3000',
  protocol: 'http:',
  username: '',
  password: '',
  host: 'www.example.com:3000',
  hostname: 'www.example.com',
  port: '3000',
  pathname: '/somePath/somePage.html',
  search: '',
  searchParams: URLSearchParams {},
  hash: ''
}

关于javascript - 如何在 POST 方法中使用 dns.lookup() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59346862/

相关文章:

javascript - 多个文件中的全局变量返回未定义

javascript - 需要对以下类型的 Javascript 代码进行解释

javascript - 使用 d3js 绘制简单的多线图

node.js - 本地存储和 session 之间的区别

node.js - 从 Zapier 创建文件

javascript - 拆分列表的 jQuery 函数

node.js - 获取 mongoDB API Node Express 中 3 个集合中的所有文档

c# - 自定义验证器可能不显示错误消息的原因?

WPF 将 ViewModel 属性传递给 Validation

c# - 如何从 FluentValidation 获取验证规则