Node.js 如何按行进行搜索?

Node.js 如何按行进行搜索?,node.js,Node.js,我只是在学习不要严格评判。我试着做Rest客户端。我想按行进行数据搜索。 目前,我只想尝试在数组中查找给定的数据。如果其中一行相同,则会显示消息OK,而在其他行中显示No。但是我有所有消息显示No。如何修复它 var data = querystring.stringify({ Name: "CEO" }) var req = http.request(options, function(res) { console.log("status: " + res.status

我只是在学习不要严格评判。我试着做Rest客户端。我想按行进行数据搜索。 目前,我只想尝试在数组中查找给定的数据。如果其中一行相同,则会显示消息OK,而在其他行中显示No。但是我有所有消息显示No。如何修复它

var data = querystring.stringify({
    Name:    "CEO"
})

var req = http.request(options, function(res) {
    console.log("status: " + res.statusCode);
    var content = ''
    res.on('data', function(chunk) {
        content += chunk
        for (var i = 0; i < content.length; i++) {
            if (content[i] === data) {
                console.log('Ок')
            } else {
                console.log('No')
            }
        }
    });
}).on('error', function(e) {
    console.log("error: " + e.message);
});

req.write(data)

req.end()
答复:

body: {"rowsCount":75,"rows":[..., {"Id":75,"Name":"CEO"}]}

代码中存在一些编程/逻辑问题,使您无法获得所需的结果

编程中最重要的部分(有时是最棘手的部分)之一是了解正在处理的数据类型,然后正确地处理它们

与您正在解决的问题一样,从API返回的数据采用
JSON
格式,在javascript中可以被视为
object
。您不必使用字符串concat将它们附加到
content
变量。通过将chunk附加到
content
变量,可以将返回给您的整个数据集转换为字符串,对字符串执行for循环与对数组执行for循环的结果截然不同

第二个问题是,如果您查看通过api返回给您的数据结构,则要搜索的记录列表位于
属性下,因此,您应该只遍历
块.rows

建议对代码进行如下修复:

var searchQuery = 'SEO';

var req = http.request(options, function(res) {

    res.on('data', function(chunk) {
        for (var i = 1; i <= chunk.rows.length; i++) {
            if (chunk.rows[i].Name === searchQuery) {
                console.log('Ок')
            } else {
                console.log('No')
            }
        }
    });
}).on('error', function(e) {
    console.log("error: " + e.message);
});

req.write(data)

req.end()
var searchQuery='SEO';
var req=http.request(选项、函数(res){
res.on('data',函数(块){

对于(var i=1;i,代码中存在一些编程/逻辑问题,使您无法获得所需的结果

编程中最重要的部分(有时是最棘手的部分)之一是了解正在处理的数据类型,然后正确地处理它们

正如您正在解决的问题一样,从API返回的数据是
JSON
格式,在javascript中可以被视为
object
。您不必通过字符串concat将它们附加到
content
变量。通过将chunk附加到
content
变量,您可以将整个数据集返回给您o字符串,对字符串执行for循环与对数组执行for循环的结果非常不同

第二个问题是,如果您查看通过api返回给您的数据结构,则要搜索的记录列表位于
属性下,因此,您应该只遍历
块.rows

建议对代码进行如下修复:

var searchQuery = 'SEO';

var req = http.request(options, function(res) {

    res.on('data', function(chunk) {
        for (var i = 1; i <= chunk.rows.length; i++) {
            if (chunk.rows[i].Name === searchQuery) {
                console.log('Ок')
            } else {
                console.log('No')
            }
        }
    });
}).on('error', function(e) {
    console.log("error: " + e.message);
});

req.write(data)

req.end()
var searchQuery='SEO';
var req=http.request(选项、函数(res){
res.on('data',函数(块){
对于(var i=1;i
  • 循环的
    将跳过返回数据的第一个元素
  • 您没有正确访问所需的搜索属性
  • 您的查询是一个字符串,您正在针对该字符串测试对象的相等性
  • 您需要访问传入数据的
    属性,然后执行查询:

    尝试一:

    const rowsToSearch = content.rows; // #2
    for (var i = 0; i < rowsToSearch.length; i++) {   // #1
        if (rowsToSearch[i].Name === 'CEO') {         // #3
           console.log('Ок')
        } else {
           console.log('No')
        }
    }
    
  • 循环的
    将跳过返回数据的第一个元素
  • 您没有正确访问所需的搜索属性
  • 您的查询是一个字符串,您正在针对该字符串测试对象的相等性
  • 您需要访问传入数据的
    属性,然后执行查询:

    尝试一:

    const rowsToSearch = content.rows; // #2
    for (var i = 0; i < rowsToSearch.length; i++) {   // #1
        if (rowsToSearch[i].Name === 'CEO') {         // #3
           console.log('Ок')
        } else {
           console.log('No')
        }
    }
    

    可能是因为您的API请求正在处理一个
    。您正在使用的API到底返回了什么?向我们展示@ethane提到的从该API返回的内容。为此,请执行
    控制台.log()
    要打印
    chunk
    @ethane的值,我添加了结果,但不是完整数组,它是big@Rai我在responseMaybe中添加了结果,这可能是因为您的API请求正在处理一个
    。您正在使用的API到底返回了什么?请向我们展示@ethane提到的从该API返回的内容。为此,请执行
    console.log()
    以打印
    chunk
    @ethane的值,我添加了结果,但不是完整数组,它是big@Rai我在responseBe中添加了结果,注意到
    行中的
    Id
    属性
    有效负载,因为它只会尝试匹配
    {Name:'CEO'}
    意思是
    isEqual({Name:'CEO'},{'Id':75,Name:'CEO'})
    将是
    false
    我总是有以下错误:
    for(var I=0;I
    的属性'length',显然问题就在这里。
    const rowsToSearch=chunk.rows;
    chunk.rows
    ,然后我建议继续追加到
    内容
    变量并循环。请注意
    Id
    pro在您的
    有效负载中,按目前的情况,这只会尝试匹配
    {Name:'CEO'}
    ,这意味着
    .isEqual({Name:'CEO'},{'Id':75,Name:'CEO'})
    将是
    false
    我总是有以下错误:
    for(var I=0;I
    的属性'length',显然问题就在这里。
    const rowsToSearch=chunk.rows;
    chunk.rows
    然后我建议继续追加到
    内容
    变量并循环。
    const query = { Name: 'CEO' };
    const rowsToSearch = chunk.rows;
    const result = rowsToSearch.find(row => _.isEqual(row, query));
    result ? console.log('OK') : console.log('No');