2015-06-01 4 views
0

Я уже несколько дней стучаю головой об этом вопросе. Здесь даже были заданы два вопроса о конкретных пакетах (iron-router, Restivus), но я не добился успеха.Как создать приложение RESTful MeteorJS

Мое дело в том, что у меня есть приложение Meteor JS, которое должно получать HTTP-запросы HTTP, чтобы вставить запись в базу данных MongoDB, но мне не удалось пройти связь между MeteorJS и остальным миром.

Я пробовал железный маршрутизатор, Restivus, и несколько часов назад, Picker. Я следил за примерами REST API в Meteorpedia, не превалируя.

Используя Restivus, я получил следующий код:

if(Meteor.isServer){ 

    //Must exist, but all options can be empty 
    Restivus.configure({ 
    }); 

    //Allow Restivus to manage Reports 
    Restivus.addCollection('reports', { 
     routeOptions: {}, 
    }); 

    console.log("Inside 'isServer'"); 

    Restivus.addRoute('reports/:message', { 

     // POST 
     post: { 
      action: function(){ 

       console.log("Got to post!"); 

       var response = null; 
       var message = this.urlParams.message; 

       if(message){ 
        console.log("Message received: " + message); 
        return {status: "success", data: message}; 
       } else { 
        console.log("Message empty..."); 
        return {status: "fail", message: "Post not found"}; 
       } 

       //Response to caller 
       return; 
      } 
     } 
    }); 
} 

И Picker, я получил это:

if(Meteor.isServer){ 

    Picker.route('/newReport/:message'), function(params, req, res, rext){ 

     if(req.method == "POST") 
      console.log("Got a POST"); 
     else 
      console.log("Not a POST"); 

     res.end("Returned"); 
    } 
} 

В обоих попытках, я получаю тот же результат, делая GET вызов. Я всегда получаю то, что кажется HTML-кодом пустого шаблона с полным <head>, но пустым <body> тегами. Я получаю тот же результат, когда я пытаюсь использовать методы GET и POST для любого пути в webapp.

Поскольку ошибка одинакова на обоих случаях, я предполагаю, что в какой-то момент моего маршрута, я делаю свою ошибку, поэтому здесь следует остальные server/router.js:

Router.configure({ 
    layoutTemplate: 'layout', 
    notFoundTemplate: 'notFound', 
    waitOn: function(){ 
     return [Meteor.subscribe('reports')] 
    } 
}); 

//Page of the report 
Router.route('/report/:message', { 
    name: 'reportPage', 
    data: function(){ 
     return Reports.findOne(this.params.message); 
    } 
}) 

Router.route('/', { 
    name: 'reportList' 
}); 

<<REST code goes here>> 

Я подозреваю, что в какой-то момент маршрутизатор отправляет пустую страницу, но я не вижу ничего в информации о маршрутизаторе, которая подразумевает это.

Я даже пытался сделать оператор if/else, который отделяет все на клиенте и все на сервере, но это не имеет никакого значения. Я попытаюсь продолжить обновление в качестве продолжения тестирования.

Спасибо заранее!

Примечание: Я попытался использовать методы GET и POST, используя curl, небольшой скрипт Ruby, который я создал, и REST Console. Результат был одинаковым во всех трех случаях.

+0

Вы проверили https://github.com/stubailo/meteor-rest/? – Delgermurun

+0

Я видел это, но я не пробовал. Честно говоря, я немного смущен тем, как это работает, и не смог найти рабочий пример. –

+0

Я оставил здесь комментарий, объяснив, что случилось с реализацией Restivus: http://stackoverflow.com/questions/30581774/configuring-restivus-post-method-for-meteor. Извините, что у вас было так много проблем с установкой REST API в Meteor. Что вы в конечном счете использовали? – kahmali

ответ

0

Как насчет использования серверных маршрутов Iron-Router?

Router 
.route('/api/path', {where: 'server'}) 
.post(function() 
{ 
    var req = this.request.body; 
}); 
Смежные вопросы