Grunt-express和静态路由:服务器应提供一个名为" listen"充当http.Server.listen

时间:2016-04-14 11:12:01

标签: javascript node.js express grunt-express

我正在尝试使用grunt-express设置Grunt以启动我的快速服务器。 在阅读docsthis SO question后,我仍然无法弄明白。我已经为我的Grunt文件尝试了几种组合。 尽管如此,每次我获取服务器都应该提供一个名为" listen"充当http.Server.listen 错误

这是我的代码:

Gruntfile.js

module.exports = function (grunt) {

    'use strict';

    var path = require('path');

    grunt.initConfig({

        pkg: grunt.file.readJSON('package.json'),

        app: {
            basePath: 'public',
            [...],
            serverPath: 'backend'
        },

        express: {
            all: {
                options: {
                    port: 3000,
                    hostname:  '*', //()=>Localhost
                    bases: '<%= app.basePath %>',
                    server: '<%= app.serverPath %>/Server.js',
                    livereload: true
                }
            }              
        }
    });
    grunt.registerTask('server', [
        'express',
        'open',
        'watch'
    ]);
    };

项目结构:

App_Root/
  -Backend/
   --Server.js
   --BackofficeRouter.js
  -Public/
   --index.html

Server.js:

var express = require('express');
var backofficeRouter = require('./backofficeRouter.js');
var constants = require('./../public/constants/ConstantsModule.js');
var app = express();
var appRoot = require('app-root-path');

app.use('/backoffice', backofficeRouter);
app.use(express.static(appRoot + '/public'));
app.listen(process.env.PORT || 3000);

BackofficeRouter.js:

backofficeRouter.get('/', function(req, res) {
    res.sendFile(path.join(appRoot + '/public/index.html'));
});

我真的不知道grunt-express如何与我的Server.js文件进行交互。 我已经尝试在我的Gruntfile中设置默认的grunt-express配置,认为它会考虑我在Server.js中的内容。但它似乎是grunt-express&#39; config覆盖所有内容。 关于我可能犯错的任何提示?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

服务器应该提供一个名为“listen”的函数,充当http.Server.listen 错误,表明grunt任务期望包含方法'listen'的服务器实例,所以你应该从您的服务器中删除此行

app.listen(process.env.PORT || 3000);

并将其替换为

module.exports = app;

这样,grunt任务将接收一个已配置的express实例,其中包含它正在寻找的listen方法。