最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

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

IT培训 admin 10浏览 0评论

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

我从事URL缩短项目。我想使用dns.lookup方法。它在单独使用时对我有用。一旦在POST方法中使用它,它就不再起作用,即使地址有效,它也会返回false。你能帮我吗?谢谢!这是整个项目::

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)传递给它,而不传递url。您可以在doc刚刚通过"example"的地方看到一个代码示例。

您可以从网址中解析主机名。您可以使用原始的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:3000/somePath/somePage.html

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

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

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

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

显示此输出:

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

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

我从事URL缩短项目。我想使用dns.lookup方法。它在单独使用时对我有用。一旦在POST方法中使用它,它就不再起作用,即使地址有效,它也会返回false。你能帮我吗?谢谢!这是整个项目::

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)传递给它,而不传递url。您可以在doc刚刚通过"example"的地方看到一个代码示例。

您可以从网址中解析主机名。您可以使用原始的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:3000/somePath/somePage.html

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

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

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

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

显示此输出:

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

评论列表 (0)

  1. 暂无评论