我从事 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/