使用 connect-rest 在 grunt-serve 中支持 POST?
Supporting POST in grunt-serve using connect-rest?
我正在尝试将 grunt serve
与 connect-rest 中间件一起使用。我尝试在我的 Gruntfile.js
中配置 connect-rest
,它适用于 GET 请求,但不适用于 POST .我想知道我错过了什么。这是我的Gruntfile.js(摘录):
module.exports = function (grunt) {
var postResponder = function(request, content, callback) {
callback(null, {Status : 42});
}
var Rest = require('connect-rest');
var rest = Rest.create( {context: '/'} );
rest.assign(['get'],'/*', postResponder);
...
livereload: {
options: {
open: true,
middleware: function (connect) {
return [
connect().use(rest.processRequest()),
connect.static('.tmp'),
connect().use('/bower_components', connect.static('./bower_components')),
connect().use('/app/styles', connect.static('./app/styles')),
connect.static(appConfig.app)
];
}
}
},
这很有魅力。但是当我将那一行更改为:
rest.assign(['post'],'/*', postResponder);
或
rest.assign('*','/*', postResponder);
然后在发布时我在日志中得到以下条目(运行 grunt --debug):
[D] server POST /api/groups.json?cache=false&force=true&requesttime=2015-10-29T06:46:24.443Z 404 103 - 2.027 ms
发帖时出现 404 错误(开始工作)。
我错过了什么?
事实证明,为了我的目的 - 能够支持 JSON 的 post 作为 mock 我不需要 connect-rest in the first place. The build in capabilities of connect 提供了我所需要的一切。所以 Gruntfile.js
的开头现在看起来像这样:
module.exports = function (grunt) {
var bodyParser = require("body-parser");
var postResponder = function(request, response, next) {
if (request.method === 'POST') {
console.log(request.method+" "+request.url);
response.setHeader('Content-Type', 'application/json');
response.statusCode = 200;
response.end(JSON.stringify(request.body));
} else {
next();
}
};
和 livereload
部分是这样的:
livereload: {
options: {
open: true,
middleware: function (connect) {
return [
connect().use('/api', bodyParser.json()),
connect().use('/api', postResponder),
connect.static('.tmp'),
connect().use('/bower_components',
connect.static('./bower_components')),
connect().use('/app/styles', connect.static('./app/styles')),
connect.static(appConfig.app)
];
}
}
}
注意:我在此处将 postbacks 限制为对 /api 的调用 - 您可能需要不同的端点。该示例只是回显收到的 JSON。
我正在尝试将 grunt serve
与 connect-rest 中间件一起使用。我尝试在我的 Gruntfile.js
中配置 connect-rest
,它适用于 GET 请求,但不适用于 POST .我想知道我错过了什么。这是我的Gruntfile.js(摘录):
module.exports = function (grunt) {
var postResponder = function(request, content, callback) {
callback(null, {Status : 42});
}
var Rest = require('connect-rest');
var rest = Rest.create( {context: '/'} );
rest.assign(['get'],'/*', postResponder);
...
livereload: {
options: {
open: true,
middleware: function (connect) {
return [
connect().use(rest.processRequest()),
connect.static('.tmp'),
connect().use('/bower_components', connect.static('./bower_components')),
connect().use('/app/styles', connect.static('./app/styles')),
connect.static(appConfig.app)
];
}
}
},
这很有魅力。但是当我将那一行更改为:
rest.assign(['post'],'/*', postResponder);
或
rest.assign('*','/*', postResponder);
然后在发布时我在日志中得到以下条目(运行 grunt --debug):
[D] server POST /api/groups.json?cache=false&force=true&requesttime=2015-10-29T06:46:24.443Z 404 103 - 2.027 ms
发帖时出现 404 错误(开始工作)。
我错过了什么?
事实证明,为了我的目的 - 能够支持 JSON 的 post 作为 mock 我不需要 connect-rest in the first place. The build in capabilities of connect 提供了我所需要的一切。所以 Gruntfile.js
的开头现在看起来像这样:
module.exports = function (grunt) {
var bodyParser = require("body-parser");
var postResponder = function(request, response, next) {
if (request.method === 'POST') {
console.log(request.method+" "+request.url);
response.setHeader('Content-Type', 'application/json');
response.statusCode = 200;
response.end(JSON.stringify(request.body));
} else {
next();
}
};
和 livereload
部分是这样的:
livereload: {
options: {
open: true,
middleware: function (connect) {
return [
connect().use('/api', bodyParser.json()),
connect().use('/api', postResponder),
connect.static('.tmp'),
connect().use('/bower_components',
connect.static('./bower_components')),
connect().use('/app/styles', connect.static('./app/styles')),
connect.static(appConfig.app)
];
}
}
}
注意:我在此处将 postbacks 限制为对 /api 的调用 - 您可能需要不同的端点。该示例只是回显收到的 JSON。