Grunt Connect, Nodemon même problème de port

J’essaie de lancer le modèle d’administration angular et le serveur de noeud par grunt et nodemon.All fonctionne bien..Le problème est lorsque j’essaie d’envoyer une demande du côté client au côté serveur, ce qui indique une erreur 404. Pour les deux, j’utilise le même port, qui est 2300. Si je change le numéro de port de server.js, le résultat est renvoyé .. Je ne peux pas les exécuter par le même port. J’envoie la demande http: // localhost: 2300 / test

Voici mon fichier Grunt:

// Generated on 2015-01-21 using generator-angular 0.9.2 'use ssortingct'; // # Globbing // for performance reasons we're only matching one level down: // 'test/spec/{,*/}*.js' // use this if you want to recursively match all subfolders: // 'test/spec/**/*.js' module.exports = function (grunt) { // Load grunt tasks automatically require('load-grunt-tasks')(grunt); // Time how long tasks take. Can help when optimizing build times require('time-grunt')(grunt); // Configurable paths for the application var appConfig = { app: require('./bower.json').appPath || 'app', dist: 'dist' }; // Define the configuration for all the tasks grunt.initConfig({ // Project settings yeoman: appConfig, // Watches files for changes and runs tasks based on the changed files watch: { bower: { files: ['bower.json'], tasks: ['wiredep'] }, js: { files: ['/scripts/{,*/}*.js'], tasks: ['newer:jshint:all'], options: { livereload: '' } }, jsTest: { files: ['test/spec/{,*/}*.js'], tasks: ['newer:jshint:test', 'karma'] }, styles: { files: ['/styles/{,*/}*.css'], tasks: ['newer:copy:styles', 'autoprefixer'] }, gruntfile: { files: ['Gruntfile.js'] }, livereload: { options: { livereload: '' }, files: [ '/{,*/}*.html', '.tmp/styles/{,*/}*.css', '/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}' ] } }, // The actual grunt server settings connect: { options: { port: 2300, // Change this to '0.0.0.0' to access the server from outside. hostname: 'localhost', livereload: 35729 }, livereload: { options: { open: true, middleware: function (connect) { return [ connect.static('.tmp'), connect().use( '/bower_components', connect.static('./bower_components') ), connect.static(appConfig.app) ]; } } }, test: { options: { port: 9001, middleware: function (connect) { return [ connect.static('.tmp'), connect.static('test'), connect().use( '/bower_components', connect.static('./bower_components') ), connect.static(appConfig.app) ]; } } }, dist: { options: { open: true, base: '' } } }, // Make sure code styles are up to par and there are no obvious mistakes jshint: { options: { jshintrc: '.jshintrc', reporter: require('jshint-stylish') }, all: { src: [ 'Gruntfile.js', '/scripts/{,*/}*.js' ] }, test: { options: { jshintrc: 'test/.jshintrc' }, src: ['test/spec/{,*/}*.js'] } }, // Empties folders to start fresh clean: { dist: { files: [{ dot: true, src: [ '.tmp', '/{,*/}*', '!/.git*' ] }] }, server: '.tmp' }, // Add vendor prefixed styles autoprefixer: { options: { browsers: ['last 1 version'] }, dist: { files: [{ expand: true, cwd: '.tmp/styles/', src: '{,*/}*.css', dest: '.tmp/styles/' }] } }, // Renames files for browser caching purposes filerev: { dist: { src: [ '/scripts/{,*/}*.js', '/styles/{,*/}*.css', '/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}', '/styles/fonts/*' ] } }, // Reads HTML for usemin blocks to enable smart builds that automatically // concat, minify and revision files. Creates configurations in memory so // additional tasks can operate on them useminPrepare: { html: '/index.html', options: { dest: '', flow: { html: { steps: { js: ['concat', 'uglifyjs'], css: ['cssmin'] }, post: {} } } } }, // Performs rewrites based on filerev and the useminPrepare configuration usemin: { html: ['/{,*/}*.html'], css: ['/styles/{,*/}*.css'], options: { assetsDirs: ['','/images'] } }, // The following *-min tasks will produce minified files in the dist folder // By default, your `index.html`'s  will take care of // minification. These next options are pre-configured if you do not wish // to use the Usemin blocks. cssmin: { dist: { files: [{ expand: true, cwd: '', src: 'styles/*.css', dest: '' }] } }, uglify: { build: { files: [{ expand: true, src: '**/*.js', dest: '/scripts', cwd: '/scripts' }] }, options: { mangle:false }, }, // concat: { // dist: {} // }, imagemin: { dist: { files: [{ expand: true, cwd: '/images', src: '{,*/}*.{png,jpg,jpeg,gif}', dest: '/images' }] } }, svgmin: { dist: { files: [{ expand: true, cwd: '/images', src: '{,*/}*.svg', dest: '/images' }] } }, htmlmin: { dist: { options: { collapseWhitespace: true, conservativeCollapse: true, collapseBooleanAtsortingbutes: true, removeCommentsFromCDATA: true, removeOptionalTags: true }, files: [{ expand: true, cwd: '', src: '**/*.html', dest: '' }] } }, // ngAnnotate sortinges to make the code safe for minification automatically by // using the Angular long form for dependency injection. It doesn't work on // things like resolve or inject so those have to be done manually. ngAnnotate: { dist: { files: [{ expand: true, cwd: '/scripts', src: '**/*.js', dest: '/scripts', }] } }, // Replace Google CDN references cdnify: { dist: { html: ['/*.html'] } }, // Copies remaining files to places other tasks can use copy: { dist: { files: [{ expand: true, dot: true, cwd: '', dest: '', src: [ '**'] },{ expand:true, cwd:'bower_components', dest:'/bower_components', src:['**'] } , { expand: true, cwd: '.tmp/images', dest: '/images', src: ['generated/*'] }, { expand: true, cwd: 'bower_components/bootstrap/dist', src: 'fonts/*', dest: '' }] }, styles: { expand: true, cwd: '/styles', dest: '.tmp/styles/', src: '{,*/}*.css' } }, // watch our node server for changes nodemon: { dev: { script: 'server.js', options: { env: { PORT: process.env.PORT || 2300 } } } }, // Run some tasks in parallel to speed up the build process concurrent: { options: { logConcurrentOutput: true }, server: [ 'copy:styles ], test: [ 'copy:styles' ], dist: [ 'copy:styles', 'imagemin', 'svgmin' ] }, // Test settings karma: { unit: { configFile: 'test/karma.conf.js', singleRun: true } } }); grunt.loadNpmTasks('grunt-nodemon'); grunt.registerTask('serve', 'Comstack then start a connect web server', function (target) { if (target === 'dist') { return grunt.task.run(['build', 'connect:dist:keepalive']); } grunt.task.run([ 'clean:server', 'concurrent:server', 'autoprefixer', 'connect:livereload', 'nodemon', 'watch' ]); }); grunt.registerTask('server', 'DEPRECATED TASK. Use the "serve" task instead', function (target) { grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.'); grunt.task.run(['serve:' + target]); }); grunt.registerTask('test', [ 'clean:server', 'concurrent:test', 'concurrent:tasks', 'autoprefixer', 'connect:test', 'karma' ]); grunt.registerTask('build', [ 'clean:dist', 'concurrent:dist', 'copy:dist', 'cssmin', 'ngAnnotate', 'uglify', 'htmlmin', 'concurrent:tasks' ]); grunt.registerTask('default', [ 'newer:jshint', 'test', 'build', 'concurrent:tasks' ]); }; 

Voici mon fichier server.js node:

 'use ssortingct'; var express = require("express"); var app = express(); var mongoose = require('mongoose'); var config = require("./config"); var User = require('./api/auth/auth.model'); mongoose.connect(config.mongoUri).connection; var port = 2300; var bodyParser = require("body-parser"); //var http = require('http').Server(app); //app.use(express.static(__dirname +'app')); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); app.get('/test', function(req, res, next) { res.json({user:'working'}); }); require('./routes')(app,passport); app.listen(port,function(){ console.log("Server is running on port - "+ port); }); 

Voici la sortie:

entrez la description de l'image ici

entrez la description de l'image ici

Vous ne devriez pas utiliser connect (car vous allez utiliser un serveur web), si vous utilisez node. Tu ferais mieux d’aller à Grunt-Nodemon

Jetez un coup d’œil à ceci, j’ai retiré Connect et appliqué le Grunt Nodemon (solution d’utilisation avancée) et j’ai bien fonctionné (en conservant mes autres tâches, sass, etc. comme auparavant).

https://github.com/ChrisWren/grunt-nodemon#advanced-usage

 concurrent: { dev: { tasks: ['nodemon', 'node-inspector', 'watch'], options: { logConcurrentOutput: true } } }, nodemon: { dev: { script: 'index.js', options: { nodeArgs: ['--debug'], env: { PORT: '5455' }, // omit this property if you aren't serving HTML files and // don't want to open a browser tab on start callback: function (nodemon) { nodemon.on('log', function (event) { console.log(event.colour); }); // opens browser on initial server start nodemon.on('config:update', function () { // Delay before server listens on port setTimeout(function() { require('open')('http://localhost:5455'); }, 1000); }); // refreshes browser when server reboots nodemon.on('restart', function () { // Delay before server listens on port setTimeout(function() { require('fs').writeFileSync('.rebooted', 'rebooted'); }, 1000); }); } } } }, watch: { server: { files: ['.rebooted'], options: { livereload: true } } }