【问题标题】:grunt-contrib-connect on same port as node.jsgrunt-contrib-connect 在与 node.js 相同的端口上
【发布时间】:2013-11-14 20:53:24
【问题描述】:

我使用的是grunt-contrib-connect,因为它附带Yeoman's angular generator

我还有一个带有翡翠视图的 node.js express 应用程序,我想在其中引用 .js、.css、.html 但似乎 grunt-contrib-connect 和 express 不能共享同一个端口。

在我的玉观中:

link(rel='stylesheet', href='styles/main.css')

在我的 grunt.js 中:

connect: {
  options: {
    port: 9000, 
    hostname: 'localhost'
  },
  livereload: {
    options: {
      middleware: function (connect) {
        return [
          lrSnippet,
          mountFolder(connect, '.tmp'),
          mountFolder(connect, yeomanConfig.app)
        ];
      }
    }
  },

在我的 app.js 中:

app.set('port', process.env.PORT || 3000);

如果我将此端口更改为 9000,我只能获取由 grunt-contrib-connect 提供的静态文件,而无法获取 express 应用程序的资源。

你能让 grunt-contrib-connect 和 node.js 在同一个端口上很好地协同工作吗?

【问题讨论】:

  • 没有进程可以监听与另一个进程相同的端口。
  • 好的,很高兴知道 :) 新想法,这听起来可能吗:某种代理可以路由到不同的端口,具体取决于您转到 //static 吗?
  • 查看发布的答案,希望对您有所帮助。

标签: node.js express gruntjs


【解决方案1】:

您可以通过bouncy 包启动代理:

var bouncy = require('bouncy');

var server = bouncy(function (req, res, bounce) {
    if (req.headers.host === 'cdn.example.com') {
        bounce(gruntConnectPort);
    } else if (req.headers.host === 'example.com') {
        bounce(expressPort);
    } else {
        res.statusCode = 404;
        res.end('no such host');
    }
});
server.listen(anotherPort);

如果它适合您,请随意调整。

【讨论】:

  • 我并没有真正尝试过 bouncy,而是尝试了 httpProxy,效果很好。
【解决方案2】:

我不确定您的最终目标是什么,但我认为您实际上只有一个由 Yeoman 提供支持的 Web 应用程序,您希望在其中使用 Express 之类的东西来呈现 Jade 视图。如果是这种情况,我会查看 David Moro's guide 以更新使用 Yeoman 的 Angular Generator 创建的项目以使用 Express 作为服务器。

当我想将我的网站从静态页面更新为也可以使用服务器端模板的东西时,我使用了它。使用此设置,您将不再在开发过程中使用 Connect,而是使用 Express 进行所有操作。请务必查看他的 GitHub 链接,以确保您了解他所做的所有更改。

【讨论】:

    猜你喜欢
    • 2015-01-25
    • 2016-05-06
    • 1970-01-01
    • 2019-01-08
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    相关资源
    最近更新 更多