duanlvxing7707 2015-11-09 08:40
浏览 167
已采纳

AngularJS app运行在Chrome上提供ERR_CONNECTION_REFUSED

I'm creating Angular application using cg-angular generator that have phalcon as back-end. I use configureProxies to connect back-end and front-end. My Gruntfile.js is

Gruntfile.js

/*jslint node: true */
'use strict';

var pkg = require('./package.json');

var createFolderGlobs = function(fileTypePatterns) {
  fileTypePatterns = Array.isArray(fileTypePatterns) ? fileTypePatterns : [fileTypePatterns];
var ignore = ['node_modules','bower_components','dist','temp'];
var fs = require('fs');
return fs.readdirSync(process.cwd())
      .map(function(file){
        if (ignore.indexOf(file) !== -1 ||
            file.indexOf('.') === 0 ||
            !fs.lstatSync(file).isDirectory()) {
          return null;
        } else {
          return fileTypePatterns.map(function(pattern) {
            return file + '/**/' + pattern;
          });
        }
      })
      .filter(function(patterns){
        return patterns;
      })
      .concat(fileTypePatterns);
};

module.exports = function (grunt) {
require('load-grunt-tasks')(grunt);
grunt.initConfig({
connect: {
  proxies: [{
            context: ['/'],
            host: '0.0.0.0',
            port: 80,
            https: false,
            changeOrigin: true
        }],
  main: {
    options: {
      port: 9001,
      hostname: '0.0.0.0',
      directory: '.',
      livereload: 35730
    }
  },
  livereload: {
            options: {
                middleware: function(connect, options) {
                    if (!Array.isArray(options.base)) {
                        options.base = [options.base];
                    }
                    // Setup the proxy
                    var middlewares = [require('grunt-connect-proxy/lib/utils').proxyRequest];
                    // Serve static files.
                    options.base.forEach(function(base) {
                        middlewares.push(connect.static(base));
                    });
                    // Make directory browse-able.
                    var directory = options.directory || options.base[options.base.length - 1];
                    middlewares.push(connect.directory(directory));
                    return middlewares;
                }
            }
        }
},
watch: {
  main: {
    options: {
        livereload: 35730,
        livereloadOnError: false,
        spawn: false
    },
    files: [createFolderGlobs(['*.js','*.less','*.html']),'!_SpecRunner.html','!.grunt'],
    tasks: [] //all the tasks are run dynamically during the watch event handler
  }
},
jshint: {
  main: {
    options: {
        jshintrc: '.jshintrc'
    },
    src: createFolderGlobs('*.js')
  }
},
clean: {
  before:{
    src:['dist','temp']
  },
  after: {
    src:['temp']
  }
},
less: {
  production: {
    options: {
    },
    files: {
      'temp/app.css': 'app.less'
    }
  }
},
ngtemplates: {
  main: {
    options: {
        module: pkg.name,
        htmlmin:'<%= htmlmin.main.options %>'
    },
    src: [createFolderGlobs('*.html'),'!index.html','!_SpecRunner.html'],
    dest: 'temp/templates.js'
  }
},
copy: {
  main: {
    files: [
      {src: ['img/**'], dest: 'dist/'},
      {src: ['bower_components/font-awesome/fonts/**'], dest: 'dist/',filter:'isFile',expand:true},
      {src: ['bower_components/bootstrap/fonts/**'], dest: 'dist/',filter:'isFile',expand:true}
      //{src: ['bower_components/angular-ui-utils/ui-utils-ieshiv.min.js'], dest: 'dist/'},
      //{src: ['bower_components/select2/*.png','bower_components/select2/*.gif'], dest:'dist/css/',flatten:true,expand:true},
      //{src: ['bower_components/angular-mocks/angular-mocks.js'], dest: 'dist/'}
    ]
  }
},
dom_munger:{
  read: {
    options: {
      read:[
        {selector:'script[data-concat!="false"]',attribute:'src',writeto:'appjs'},
        {selector:'link[rel="stylesheet"][data-concat!="false"]',attribute:'href',writeto:'appcss'}
      ]
    },
    src: 'index.html'
  },
  update: {
    options: {
      remove: ['script[data-remove!="false"]','link[data-remove!="false"]'],
      append: [
        {selector:'body',html:'<script src="app.full.min.js"></script>'},
        {selector:'head',html:'<link rel="stylesheet" href="app.full.min.css">'}
      ]
    },
    src:'index.html',
    dest: 'dist/index.html'
  }
},
cssmin: {
  main: {
    src:['temp/app.css','<%= dom_munger.data.appcss %>'],
    dest:'dist/app.full.min.css'
  }
},
concat: {
  main: {
    src: ['<%= dom_munger.data.appjs %>','<%= ngtemplates.main.dest %>'],
    dest: 'temp/app.full.js'
  }
},
ngAnnotate: {
  main: {
    src:'temp/app.full.js',
    dest: 'temp/app.full.js'
  }
},
uglify: {
  main: {
    src: 'temp/app.full.js',
    dest:'dist/app.full.min.js'
  }
},
htmlmin: {
  main: {
    options: {
      collapseBooleanAttributes: true,
      collapseWhitespace: true,
      removeAttributeQuotes: true,
      removeComments: true,
      removeEmptyAttributes: true,
      removeScriptTypeAttributes: true,
      removeStyleLinkTypeAttributes: true
    },
    files: {
      'dist/index.html': 'dist/index.html'
    }
  }
},
karma: {
  options: {
    frameworks: ['jasmine'],
    files: [  //this files data is also updated in the watch handler, if updated change there too
      '<%= dom_munger.data.appjs %>',
      'bower_components/angular-mocks/angular-mocks.js',
      createFolderGlobs('*-spec.js')
    ],
    logLevel:'ERROR',
    reporters:['mocha'],
    autoWatch: false, //watching is handled by grunt-contrib-watch
    singleRun: true
  },
  all_tests: {
    browsers: ['PhantomJS','Chrome','Firefox']
  },
  during_watch: {
    browsers: ['PhantomJS']
  },
}
});

grunt.registerTask('build',['jshint','clean:before','less','dom_munger','ngtemplates','cssmin','concat','ngAnnotate','uglify','copy','htmlmin','clean:after']);
grunt.registerTask('serve', ['dom_munger:read','jshint','configureProxies:server', 'connect:livereload', 'watch']);
grunt.registerTask('test',['dom_munger:read','karma:all_tests']);

grunt.event.on('watch', function(action, filepath) {
//https://github.com/gruntjs/grunt-contrib-watch/issues/156

var tasksToRun = [];

if (filepath.lastIndexOf('.js') !== -1 && filepath.lastIndexOf('.js') === filepath.length - 3) {

  //lint the changed js file
  grunt.config('jshint.main.src', filepath);
  tasksToRun.push('jshint');

  //find the appropriate unit test for the changed file
  var spec = filepath;
  if (filepath.lastIndexOf('-spec.js') === -1 || filepath.lastIndexOf('-spec.js') !== filepath.length - 8) {
    spec = filepath.substring(0,filepath.length - 3) + '-spec.js';
  }

  //if the spec exists then lets run it
  if (grunt.file.exists(spec)) {
    var files = [].concat(grunt.config('dom_munger.data.appjs'));
    files.push('bower_components/angular-mocks/angular-mocks.js');
    files.push(spec);
    grunt.config('karma.options.files', files);
    tasksToRun.push('karma:during_watch');
  }
}

//if index.html changed, we need to reread the <script> tags so our next run of karma
//will have the correct environment
if (filepath === 'index.html') {
  tasksToRun.push('dom_munger:read');
}

grunt.config('watch.main.tasks',tasksToRun);

});
};

when I run grunt server it say

Running "configureProxies:server" (configureProxies) task Proxy created for: / to 0.0.0.0:80

Running "connect:livereload" (connect) task Started connect web server on http://localhost:8000

When I rout to my php back-end in browser it shows my encoded json data. in my angular app have get request ($http.get('url').success(function(data){log.console(data)});) but I rout to localhost:9001 it's gives error

ERR_CONNECTION_REFUSED

something wrong with my gruntfile?. how can I fix this?.

  • 写回答

1条回答 默认 最新

  • duanluan8390 2015-11-10 05:36
    关注

    After some researches and few discussion I can resolve the problem. problem is in the grunt file. Even if I have set connect option as port 9001 it runs on Port 8000 because of that I get the chrome error So I change the grunt file connect part to like this.

    connect: {
      proxies: [{
                context: ['/api'],
                host: '0.0.0.0',
                port: 80,
                https: false,
                changeOrigin: true
            }],
    //In here I remove the main:{}
        options: {
          port: 9001,
          hostname: '0.0.0.0',
          directory: '.', 
          livereload: 35730
      },
      livereload: {
                options: {
                    middleware: function(connect, options) {
                        if (!Array.isArray(options.base)) {
                            options.base = [options.base];
                        }
                        // Setup the proxy
                        var middlewares = [require('grunt-connect-proxy/lib/utils').proxyRequest];
                        // Serve static files.
                        options.base.forEach(function(base) {
                            middlewares.push(connect.static(base));
                        });
                        // Make directory browse-able.
                        var directory = options.directory || options.base[options.base.length - 1];
                        middlewares.push(connect.directory(directory));
                        return middlewares;
                    }
                }
            }
    },
    

    also I change the load sequence of sever Task like this. and put the more important task in the start like "configureProxies:server" and "connect:livereload"

    grunt.registerTask('serve', ['configureProxies:server', 'connect:livereload','dom_munger:read','jshint', 'watch']);
    

    and those changes work for me and work nicely in my browser.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化