我在尝试设置我的项目以使用 grunt-express 时遇到了一个奇怪的问题,我目前正在尝试配置 socket.io 以使用哪种打破了正常的资产路由。
我有两种模式用于运行我的服务器, dev 和 prod ,根据这些模式,我将分别从不同的位置提供我的文件。
Gruntfile.js 中的相关内容:
express: {
options: {
server: "app.js",
port: 3000,
hostname: "localhost"
},
dev: {
options: {
debug: true,
bases: "dev"
}
},
prod: {
options: {
bases: "public"
}
}
}, .. etc ..
我使用的是: app.js:
/**
* Module dependencies
*
*/
var express = require("express"),
packageJson = require("./package.json"),
app = express(),
path = require('path'),
httpServer = require("http").createServer(app),
io = require("socket.io").listen(httpServer);
/**
* Express
*
*/
app.configure(function() {
app.use(express.compress());
app.set("views", __dirname + "/app/views");
app.set("view engine", "jade");
app.use(express.favicon(__dirname + "/public/img/favicon.ico"));
app.use(express.logger("dev"));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
/**
* 404 page
*
*/
app.use(function(req, res) {
res.status(404).render("404");
});
});
/**
* Socket.io
*
*/
io.configure(function() {
io.set("log level", 2);
});
/**
* Routes
*
*/
require("./app/routes")(app);
/**
* Export
*
*/
exports = module.exports = httpServer;
// Adding necessary use() method for returnable httpServer instance
exports.use = function() {
app.use.apply(app, arguments);
};
使用这样的设置,如果我在 dev 模式下运行我的服务器,则会发生以下情况( base被忽略,但是http://localhost:3000/socket.io/socket.io.js
有效!:
socket.io.js - 200 - FOUND
main.css - 404 - NOT FOUND
require.js - 404 - NOT FOUND
但是,如果我将 app.js 配置部分更改为例如手动添加 dev 路由(与base相同),那么一切都运行良好:
app.use(express.static(path.join(__dirname, 'dev')));
socket.io.js - 200 - FOUND
main.css - 200 - FOUND
require.js - 200 - FOUND
etc.js - 200 - FOUND
我之所以没有工作的原因是因为它不那么hacky而且那些意味着像那样使用,如果我完全删除 socket.io 的东西,它们会起作用。
任何提示?日Thnx!
答案 0 :(得分:-1)
根据README中的server规范,您不希望在应用中使用listen(),因此这是我看到的一个问题。我也看到你正在使用debug which was deprecated。