Поддержка POST в grunt-serve с использованием connect-rest?
Я пытаюсь использовать grunt serve
с промежуточным программным обеспечением connect-rest. Я пытался настроить connect-rest
в моем Gruntfile.js
который работал для запросов 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 при публикации (получить работу).
Что мне не хватает?
1 ответ
Оказалось, что для моей цели - для поддержки поста JSON в качестве макета, во-первых, мне не нужен connect-rest. Встроенные возможности подключения обеспечили все, что мне нужно. Итак, начало 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)
];
}
}
}
Примечание: я ограничиваю обратные вызовы здесь вызовами / api - вам могут понадобиться разные конечные точки. Пример просто повторяет полученный JSON.