【问题标题】:How do I query the contents of my list in order?如何按顺序查询列表的内容?
【发布时间】:2021-10-25 01:10:12
【问题描述】:

我正在尝试创建 DNS api。由于我的记录在节点 js 上是异步的,因此我无法匹配记录名称和记录值。如何同步此构建?或者如何在记录值旁边添加记录名称?

import dns  from 'dns';

const rrtype="*";
const obj= ["A","MX","CNAME","NS","TXT"];
var myobj = [];


export const getAllRecords = (req,res) => {
    const {domain} = req.params;
    
        for(var i=0;i<obj.length;i++){
           dns.resolve(domain, obj[i], (err, records) => myobj.push(records));
        }
        setTimeout(function(){ 
        res.send(myobj);
        }, 1000);
        myobj = [];
        
}

【问题讨论】:

  • 做一个promise数组然后使用Promise.all()
  • 我该怎么做?我是新手

标签: javascript node.js api dns


【解决方案1】:

您可以像@Barmar 建议的那样使用Promise.All,或者如果您想按顺序进行dns 查找,您可以这样做,请注意dns.promises.resolve 的使用,它返回一个承诺而不是回调,以及使用async/await。我将其作为脚本进行了测试,因此我还将调用的输出置于getAllRecords({ params: { domain: "gmail.com" } });


import dns from "dns";

const rrtype = "*";
const obj = ["A", "MX", "CNAME", "NS", "TXT"];

export const getAllRecords = async (req, res) => {
  const { domain } = req.params;

  let myObj = [];

  for (let i = 0; i < obj.length; i++) {
    try {
      const res = await dns.promises.resolve(domain, obj[i]);
      myObj.push({ recordType: obj[i], recordValue: res });
    } catch (err) {
      console.log(err);
    }
  }

  // Debug results
  console.log(JSON.stringify(myObj, null, 4));

  setTimeout(() => {
    // res.send(myObj);
    console.log(" === END ===");
  }, 1000);
};

// Simple test
getAllRecords({ params: { domain: "gmail.com" } });

输出:

> node dnsTest.js

Error calling resolve Error: queryCname ENODATA gmail.com
    at QueryReqWrap.onresolve [as oncomplete] (internal/dns/promises.js:170:17) {
  errno: 'ENODATA',
  code: 'ENODATA',
  syscall: 'queryCname',
  hostname: 'gmail.com'
}
[
    {
        "recordType": "A",
        "recordValue": [
            "142.250.184.5"
        ]
    },
    {
        "recordType": "MX",
        "recordValue": [
            {
                "exchange": "alt4.gmail-smtp-in.l.google.com",
                "priority": 40
            },
            {
                "exchange": "alt2.gmail-smtp-in.l.google.com",
                "priority": 20
            },
            {
                "exchange": "alt3.gmail-smtp-in.l.google.com",
                "priority": 30
            },
            {
                "exchange": "gmail-smtp-in.l.google.com",
                "priority": 5
            },
            {
                "exchange": "alt1.gmail-smtp-in.l.google.com",
                "priority": 10
            }
        ]
    },
    {
        "recordType": "NS",
        "recordValue": [
            "ns1.google.com",
            "ns3.google.com",
            "ns2.google.com",
            "ns4.google.com"
        ]
    },
    {
        "recordType": "TXT",
        "recordValue": [
            [
                "globalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8="
            ],
            [
                "v=spf1 redirect=_spf.google.com"
            ]
        ]
    }
]
 === END ===

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 2016-07-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 2011-09-08
    相关资源
    最近更新 更多