我正在使用res.send('string')服务器端路由器在meteor中使用像采摘机或res.json(json)这样的快速函数。在文件中,它说:
您可以使用现有的连接和表示中间件,没有任何问题。
如何使用像res.send和res.json这样的快速功能?当我尝试使用它们时,它告诉我它们不是一个函数。
我的服务器有以下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'));
});以及以下路由操作( route /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"
}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;发布于 2016-09-04 03:07:27
由于Picker/Meteor没有使用express,所以它没有res.send()和res.json()。
但是,您可以探索Restivus,它是一个高级api包装器,可以自动处理json。
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"}
};
}
}
});
});
}https://stackoverflow.com/questions/39197919
复制相似问题