1

Я использую опцию промежуточного программного обеспечения grunt-contrib-connect, чтобы издеваться над статическими json-данными, но функция промежуточного программного обеспечения имеет только 2 аргумента, третий аргумент, который должен быть отключен массивом, не определен. мой gruntfile часть:Почему третий аргумент опции middlewares для grunt-contrib-connect не определен?

// The actual grunt server settings 
connect: { 
    options: { 
     port: 9000, 
     livereload: 35729, 
     // Change this to '0.0.0.0' to access the server from outside 
     hostname: '0.0.0.0' 
    }, 
    server: { 
     options: { 
      open: 'http://localhost:9000', 
      base: [ 
       '<%= yeoman.dist %>', 
       '<%= yeoman.tmp %>', 
       '<%= yeoman.app %>' 
      ], 
      middleware: function(connect, options, middlewares) { 
       var bodyParser = require('body-parser'); 
       // the middlewares is undefined,so here i encountered an error. 
       middlewares.unshift(
        connect().use(bodyParser.urlencoded({ 
         extended: false 
        })), 
        function(req, res, next) { 
         if (req.url !== '/hello/world') return next(); 
         res.end('Hello, world from port #' + options.port + '!'); 
        } 
       ); 
       return middlewares; 
      } 
     } 
    }, 
    test: { 
     options: { 
      port: 9001, 
      base: [ 
       '<%= yeoman.tmp %>', 
       'test', 
       '<%= yeoman.app %>' 
      ] 
     } 
    }, 
    dist: { 
     options: { 
      open: true, 
      base: '<%= yeoman.dist %>', 
      livereload: false 
     } 
    } 
}, 

Ошибка:

Running "connect:server" (connect) task 
Warning: Cannot read property 'unshift' of undefined Use --force to continue. 

Aborted due to warnings. 
+0

Какую версию 'grunt-contrib-connect' вы используете? – Interrobang

+0

@Interrobang Набрав 'npm view grunt-contrib-connect version', он показывает' 0.10.1' – Aflext

ответ

0

Вопрос не на самом деле, что middlewares не определено. Если у вас была полная трассировка стека, вы увидите, что линия, которая бросает, на самом деле находится внутри вашего вызова до connect().use().

Вы не можете переключить вызов на use() на массив middlewares. Вместо этого вы должны просто использовать промежуточное программное обеспечение, созданное bodyParser, например:

middlewares.unshift(
    bodyParser.urlencoded({ 
    extended: false 
    }), 
    function(req, res, next) { 
    if (req.url !== '/hello/world') return next(); 
    res.end('Hello, world from port #' + options.port + '!'); 
    } 
); 
+0

Не работает. На самом деле, когда я печатаю 'arguments', он просто показывает 2 аргумента. Как сделать« полный стек » trace'? – Aflext

+0

['--stack'] (https://github.com/gruntjs/grunt/blob/master/lib/grunt/cli.js#L68):« Печать трассировки стека при выходе с предупреждением или фатальной ошибкой » – Interrobang

+0

Я проследил в исходный файл и выяснил, что пакет устарел, даже версия является последней. Поэтому я заново установил пакет, он работает! – Aflext