与node.js在同一端口上的grunt-contrib-connect

时间:2013-11-04 08:55:29

标签: node.js express gruntjs

我正在使用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提供的静态文件,并且不能使用快速应用程序的资源。

你可以让grunt-contrib-connect和node.js在同一个端口上很好地一起玩吗?

2 个答案:

答案 0 :(得分: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);

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

答案 1 :(得分:1)

我不确定你最终的目标是什么,但我认为你真的只有一个由Yeoman提供支持的网络应用程序,你可以在其中使用像Express这样的东西来渲染Jade视图。如果是这种情况,我会检查David Moro's guide更新使用Yeoman的Angular Generator创建的项目,以便将Express用于服务器。

当我想将我的网站从静态页面更新为也可以使用服务器端模板的东西时,我使用了这个。使用此设置,您将不再在开发期间使用Connect,而是将Express用于所有内容。一定要查看检查他的GitHub链接,以确保你获得他所做的所有更改。