grunt-express:使用socket.io配置忽略http基础

时间:2014-02-01 17:35:00

标签: javascript node.js socket.io gruntjs grunt-express

我在尝试设置我的项目以使用 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!

1 个答案:

答案 0 :(得分:-1)

根据README中的server规范,您不希望在应用中使用listen(),因此这是我看到的一个问题。我也看到你正在使用debug which was deprecated