Вызов внешнего API с помощью приложения Node (KeystoneJS)

Я новичок в Node и пытаюсь узнать, как изменить свое приложение Keystone.JS, чтобы оно могло вызывать данные из API (JSON или XML) и отображать их в отображаемом представлении.

Текущий код в моем приложении по сути является клонированной версией этого демонстрационного приложения https://github.com/JedWatson/keystone-demo, за исключением того, что в моем приложении механизм просмотра — это Handlebars. До сих пор я пытался установить пакет запроса и безуспешно экспериментировал с кодом из документации в моем файле keystone.js.

Затем я создал файл model/api.js, route/api.js, route/views/api.js и templates/views/api.hbs и снова поигрался с примерами кода в документации запроса, но даже не понял, что я имел в виду. и как все эти новые страницы вообще работали в моем приложении.

Я был бы очень признателен за то, чтобы выяснить, как вызывать API и отображать запрошенную информацию в одном из представлений, отображаемых приложениями. Заранее спасибо!


person Kevin Dark    schedule 12.01.2015    source источник


Ответы (1)


Вы можете использовать API из логики вашей модели следующим образом: //github.com/r3dm/shpe-sfba/blob/master/models/Event.js#L69 Вы можете использовать встроенную в узел http-библиотеку http://devdocs.io/node/http

// Below we call the Facebook api to fill in data for our model
Event.schema.pre('save', function(next) {
    var myEvent = this;

    var apiCall = 'your API string';

    https.get(apiCall, function(res) {
        var body = '';
        res.on('data', function(d) { body += d; });
        res.on('end', function() {
        body = JSON.parse(body);

        if (body.error) {
            var err = new Error('There was an error saving your changes. Make sure the Facebook Event is set to "Public" and try again');
            next(err);
        } else {
            next();
        });
    })
    .on('error', function(e) {
        console.log(e);
    });
});

Если вы хотите, чтобы данные извлекались в другом сценарии, попробуйте добавить http-запрос к initLocals в routes/middleware.js.

person Harry Moreno    schedule 13.01.2015
comment
Спасибо, Гарри, я попробую сегодня вечером. - person Kevin Dark; 13.01.2015