grunt默认的livereload不支持post请求,而项目为了模拟线上效果需要将请求改成post。这个问题已经困扰了几天了,一直都没机会集中精力来解决这个事情,今天专门来解决这个问题。 遇到这种技术问题,google baidu都不靠谱了,还是stackoverflow最专业,在stackoverflow搜索”grunt post support”,找到这个结果: yeoman 1.0 - make development server accept POST calls

第一次按照步骤没成功,然后从调试发现是因为路径不对,随后调整目录,比如我的接口文件在json/目录下,如果我要访问/json/app/list.json ,就需要这样配置:

restSupport.rester({'context': '/json'})//支持post
restSupport.post( { path: ‘/app/list.json’}

经测可用! 但是呢,这样配置只能支持一个接口,如果我要json/目录下的所有.json文件都同样处理,试了下把path改为/**/*.json,即:

restSupport.post( { path: ‘/**/*.json’}

然后读取该文件里面的内容返回给客户端,这里得到post请求的完整路径为:req.headers.originalUrl。代码为:

fs.readFile('.' + req.headers.originalUrl, 'utf8', function(err, result) {
        var json = JSON.parse(result);
        next(null, json);
    });

so,最终代码如下:

首先加入connect-rest模块: package.json增加

"connect-rest": "~0.7.2" 

初始配置:

var fs = require('fs');
var restSupport = require('connect-rest');
restSupport.post({
    path: '/**/*.json'
}, function(req, content, next) {
    fs.readFile('.' + req.headers.originalUrl, 'utf8', function(err, result) {
        var json = JSON.parse(result);
        next(null, json);
    })
});

connect->livereload->options->middleware 加入

restSupport.rester({'context': '/json'})//支持post