meteor采摘器服务器端路由器使用快递中间件
我想使用select器服务器端路由器中的res.send('string')
或res.json(json)
在我的meteorrestapi快递函数。 在文档中,它说:
您可以使用现有的连接和表示中间件没有任何问题。
我如何使用res.send和res.json等快捷function? 当我尝试使用它们时,它告诉我他们不是一个function。
我有我的服务器的以下main.js文件:
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')); });
而下面的路由动作(routes / helloworld.js):
function helloworld(params, req, res, next) { res.send('id:' + params.id); } module.exports = helloworld;
我得到以下错误:
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" }
更新我发现我可以用这个代码模仿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;
Picker / Meteor没有使用express,它没有res.send()和res.json()。
但是,您可以探索Restivus,这是一个自动处理json的高级api包装器。
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"} }; } } }); }); }