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
Comments(0)