簡體   English   中英

使用Restler的Node.js返回值?

[英]Node.js with Restler to return a value?

這在我的Node和JavaScript學習中還很早。 理想情況下,我要嘗試創建一個小模塊,以查詢特定類型的其余端點並基於屬性查詢返回特定功能。 該模塊正確注銷了結果,但是我正在努力獲取.findById函數以返回此結果。 盡管知道它與回調的工作方式有關,但是我還沒有足夠的經驗來解決它。 非常感謝您提供任何幫助,建議和指導,以解釋該解決方案。

// import modules
var restler = require('restler');

// utility for padding zeros so the queries work
function padZeros(number, size) {
    var string = number + "";
    while (string.length < size) string = "0" + string;
    return string;
}

// create feature service object
var FeatureService = function (url, fields) {

    // save the parameters
    this.restEndpoint = url;
    this.fields = fields;
    var self = this;

    this.findById = function (idField, value, padZeroLength) {

        var options = {
            query: {
                where: idField + '=\'' + padZeros(value, padZeroLength) + '\'',
                outFields: this.fields,
                f: "pjson"
            },
            parsers: 'parsers.json'
        };

        var url =  this.restEndpoint + '/query';

        restler.get(url, options).on('complete', function(result){
            if (result instanceof Error){
                console.log('Error:', result.message);
            } else {
                console.log(result); // this log result works
                self.feature = JSON.parse(result);
            }
        });
        return self.feature;
    };
};

var restEndpoint = 'http://services.arcgis.com/SgB3dZDkkUxpEHxu/ArcGIS/rest/services/aw_accesses_20140712b/FeatureServer/1';
var fields = 'nameRiver,nameSection,nameSectionCommon,difficulty,diffMax';

var putins = new FeatureService(restEndpoint, fields);
var feature = putins.findById('awid_string', 1143, 8);
console.log(feature); // this log result does not
//console.log('River: ' + feature.attributes.nameRiver);
//console.log('Section: ' + feature.attributes.nameSection + ' (' + feature.attributes.nameSectionCommon + ')');
//console.log('Difficulty: ' + feature.attributes.difficulty);

因此,我整理了如何從上一個線程插入回調。 看起來它只是作為變量傳入,並使用預期參數進行調用。 但是,我現在想知道是否有更好的方法可以接受參數(可能以選項的形式)。 有什么建議嗎?

// import modules
var restler = require('restler');

// utility for padding zeros so the queries work
function padZeros(number, size) {
    var string = number + "";
    while (string.length < size) string = "0" + string;
    return string;
}

// create feature service object
var FeatureService = function (url, fields) {

    // save the parameters
    this.restEndpoint = url;
    this.fields = fields;
    var self = this;

    // find and return single feature by a unique value
    this.findById = function (idField, value, padZeroLength, callback) {

        // query options for
        var options = {
            query: {
                where: idField + '=\'' + padZeros(value, padZeroLength) + '\'',
                outFields: this.fields,
                f: "pjson"
            },
            parsers: 'parsers.json'
        };

        var url = this.restEndpoint + '/query';

        restler.get(url, options)
            .on('success', function(data, response){
                var dataObj = JSON.parse(data).features[0];
                console.log(dataObj);
                callback(dataObj);
            })
            .on('fail', function(data, response){
                console.log('Error:', data.message);
            });
        return self.feature;
    };
};

var restEndpoint = 'http://services.arcgis.com/SgB3dZDkkUxpEHxu/ArcGIS/rest/services/aw_accesses_20140712b/FeatureServer/1';
var fields = 'nameRiver,nameSection,nameSectionCommon,difficulty,diffMax';

var putins = new FeatureService(restEndpoint, fields);
putins.findById('awid_string', 1143, 8, function(dataObject){
    console.log('River: ' + dataObject.attributes.nameRiver);
    console.log('Section: ' + dataObject.attributes.nameSection + ' (' + dataObject.attributes.nameSectionCommon + ')');
    console.log('Difficulty: ' + dataObject.attributes.difficulty);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM