我有一个静态项目,我正在尝试虚拟种子JSON文件,但它只允许我通过GET访问它们。这是我的grunt配置文件,有谁知道我将如何允许POST?
module.exports = function(grunt) {
// Configure
grunt.config.set('connect', {
server: {
options: {
hostname: '*',
middleware: function(connect) {
return [
function(request, response, next) {
response.setHeader('Access-Control-Allow-Origin', '*');
response.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
response.setHeader('Access-Control-Allow-Headers', 'Content-Type');
return next();
},
connect.static(require('path').resolve('.'))
];
}
}
}
});
// Load Task
grunt.loadNpmTasks('grunt-contrib-connect');
};
答案 0 :(得分:2)
这是我的解决方案,希望可以帮到你,我只检查base [0],你可以扩展它。
重要的是使用:中间件。取消移动,而不是推送
connect: {
dev: {
options: {
// 经过测试 connect插件会依照base的定义顺序检索文件
// 这意味着如果存在相同文件,定义在前面的会优先返回
base: ['app', '.'],
port: 8888,
// open: true,
livereload: true,
hostname: 'localhost',
middleware: function (connect, options, middlewares) {
var fs = require('fs');
var path = require('path');
var support = ['POST', 'PUT', 'DELETE'];
middlewares.unshift(function (req, res, next) {
// 单独处理POST请求 请求的地址必须是文件 这里没有进行rewrite处理
if (support.indexOf(req.method.toUpperCase()) != -1) {
var filepath = path.join(options.base[0], req.url);
if (fs.existsSync(filepath) && fs.statSync(filepath).isFile()) {
return res.end(fs.readFileSync(filepath));
}
}
return next();
});
return middlewares;
},
}
}
}
答案 1 :(得分:1)
我有另一种解决此问题的方法,如果您的代码不适用于上述情况,请执行此操作:
connect: {
server: {
options: {
keepalive: true,
port: 8001,
protocol: 'http',
hostname: '*',
directory: 'dist',
open: {
target: 'http://localhost:8001/myDemo.html',
},
middleware: function(connect, options, middlewares) {
middlewares.unshift(function(req, res, next) {
res.setHeader('Access-Control-Allow-Credentials', true);
res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
if (req.method.toUpperCase() == 'POST') req.method='GET';
return next();
});
return middlewares;
}
}
}
},
我确信这肯定会有效:)