2016-08-29 7 views
5

pickerサーバー側のルータを使用して、私は流星の残りのAPIでres.send('string')またはres.json(json)のようなエクスプレス機能を使用しようとしています。ドキュメントには、流星ピッカーサーバー側のルータは、エクスプレスミドルウェアを使用

既存の接続およびエクスプレスミドルウェアは、 の問題なしで使用できます。

res.sendおよびres.jsonのような表現機能を使用するにはどうすればよいですか?私はそれらを使用しようとすると、彼らは機能していないと私に伝えます。

私は私のサーバーに対して次のmain.jsファイルを持っている:私は次のエラーを取得する

function helloworld(params, req, res, next) { 
    res.send('id:' + params.id); 
} 

module.exports = helloworld; 

import { Meteor } from 'meteor/meteor'; 
import { Picker} from 'meteor/meteorhacks:picker'; 

var bodyParser = Meteor.npmRequire('body-parser'), 
    methodOverride = Meteor.npmRequire('method-override'), 
    logger = Meteor.npmRequire('morgan'); 

Picker.middleware(bodyParser.json()); 
Picker.middleware(bodyParser.urlencoded({extended:false})); 
Picker.middleware(logger('dev')); 
Picker.middleware(methodOverride('X-HTTP-Method'));   // Microsoft 
Picker.middleware(methodOverride('X-HTTP-Method-Override')); // Google/GData 
Picker.middleware(methodOverride('X-Method-Override')); 

Meteor.startup(() => { 
    console.log('meteor server started'); 

    var postRoutes = Picker.filter(function(req, res) { 
     return req.method == "POST"; 
    }); 

    postRoutes.route('/post/:id', require('./routes/helloworld')); 
}); 

そして、次のルートアクション(ルート/ helloworld.jsを)

TypeError: res.send is not a function 

res.jsonを使用しようとすると、同じエラーが表示されます...

packages.json:

{ 
    "body-parser": "1.15.2", 
    "chai": "3.5.0", 
    "chai-http": "3.0.0", 
    "method-override": "2.3.6", 
    "mocha": "3.0.2", 
    "moment": "2.14.1", 
    "moment-timezone": "0.5.5", 
    "morgan": "1.7.0", 
    "supertest": "2.0.0", 
    "supertest-as-promised":"4.0.0", 
    "express":"4.14.0" 
} 

UPDATE私はこのコードでres.jsonを模倣することができることを見出した:

function helloworld(params, req, res, next) { 
    console.log(req.body); 
    res.setHeader('Content-Type', 'application/json'); 
    res.end(JSON.stringify({id:params.id})); 
} 

module.exports = helloworld; 
+0

あなたが明確でない質問。 'res.json()'や 'res.end()'/'res.write() 'を使うとエラーになりますか?それらはちょうど箱からうまくいくはずです。しかし、 'res.send()'はありません。 –

+0

res.jsonとres.sendでエラーが発生する – AlexB

+0

res.sendとres.jsonはexpressの関数です – AlexB

答えて

1

ピッカー/流星エクスプレス使用されないように、そうでありませんres.send()とres.json()があります。

しかし、自動的にjsonを処理する上位レベルのAPIラッパーであるRestivusを調べることができます。続き

http://meteorpedia.com/read/REST_API#Restivus

上記のリンクからサンプルコードです:

if(Meteor.isServer) { 
    Meteor.startup(function() { 
    // Global configuration 
    Api = new Restivus({ 
     version: 'v1', 
     useDefaultAuth: true, 
     prettyJson: true 
    }); 

    // Generates: GET/POST on /api/v1/users, and GET/PUT/DELETE on /api/v1/users/:id 
    // for Meteor.users collection (works on any Mongo collection) 
    Api.addCollection(Meteor.users); 
    // That's it! Many more options are available if needed... 

    // Maps to: POST /api/v1/articles/:id 
    Api.addRoute('articles/:id', {authRequired: true}, { 
     post: { 
     roleRequired: ['author', 'admin'], 
     action: function() { 
      var article = Articles.findOne(this.urlParams.id); 
      if (article) { 
      return {status: "success", data: article}; 
      } 
      return { 
      statusCode: 400, 
      body: {status: "fail", message: "Unable to add article"} 
      }; 
     } 
     } 
    }); 
    }); 
} 
関連する問題