Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gruntjs 如何允许grunt contrib connect允许静态文件上的POST、PUT和DELETE方法?_Gruntjs_Grunt Contrib Connect - Fatal编程技术网

Gruntjs 如何允许grunt contrib connect允许静态文件上的POST、PUT和DELETE方法?

Gruntjs 如何允许grunt contrib connect允许静态文件上的POST、PUT和DELETE方法?,gruntjs,grunt-contrib-connect,Gruntjs,Grunt Contrib Connect,我有一个静态项目,我正在使用伪种子JSON文件,但是它只允许我通过GET访问它们。这是我的grunt配置文件,有人知道我如何允许POST吗 module.exports = function(grunt) { // Configure grunt.config.set('connect', { server: { options: { hostname: '*', middle

我有一个静态项目,我正在使用伪种子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],你可以扩展它

重要的是使用:中间件。取消移动,而不是推送

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;
      },
    }
  }
}

我有另一种方法来解决此问题,如果您的代码不适用于上述情况,请执行此操作:

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;
                        }

                } 
            } 
        },

我确信这肯定会奏效:)

我不喜欢这个解决方案,因为我认为这是一个不好的做法,但这是唯一对我有效的方法。