我有一个静态项目,我正在尝试虚拟种子 JSON文件,但它只允许我通过GET访问它们.这是我的grunt配置文件,有谁知道我将如何允许POST? module.exports = function(grunt) { // Configure grunt.config.set('co
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'); };这是我的解决方案,希望可以帮到你,我只检查base [0],你可以扩展它.
重要的是使用:middlewares.unshift,而不是推
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; }, } } }