Grunt-express 和静态路由:服务器应该提供一个名为 "listen" 的函数作为 http.Server.listen
Grunt-express and static routes : Server should provide a function called "listen" that acts as http.Server.listen
我正在尝试使用 grunt-express 设置 Grunt 以启动我的快速服务器。
看了docs and this SO question,还是想不通。我已经为我的 Grunt 文件尝试了几种组合。
尽管如此,每次我得到 Server 时都应该提供一个名为 "listen" 的函数作为 http.Server.listen error
这是我的代码:
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 的配置覆盖了一切。
关于我可能在哪里犯错的任何提示?
感谢您的帮助。
服务器应该提供一个名为 "listen" 的函数作为 http.Server.listen 错误表明 grunt 任务需要一个包含该方法的服务器实例'listen',所以你应该从你的服务器中删除这一行
app.listen(process.env.PORT || 3000);
并将其替换为
module.exports = app;
这样,grunt 任务将收到一个已配置的 express 实例,其中包含它正在寻找的 listen 方法。
我正在尝试使用 grunt-express 设置 Grunt 以启动我的快速服务器。 看了docs and this SO question,还是想不通。我已经为我的 Grunt 文件尝试了几种组合。 尽管如此,每次我得到 Server 时都应该提供一个名为 "listen" 的函数作为 http.Server.listen error
这是我的代码:
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 的配置覆盖了一切。 关于我可能在哪里犯错的任何提示?
感谢您的帮助。
服务器应该提供一个名为 "listen" 的函数作为 http.Server.listen 错误表明 grunt 任务需要一个包含该方法的服务器实例'listen',所以你应该从你的服务器中删除这一行
app.listen(process.env.PORT || 3000);
并将其替换为
module.exports = app;
这样,grunt 任务将收到一个已配置的 express 实例,其中包含它正在寻找的 listen 方法。