小编Aar*_*ron的帖子

我应该如何在同一系统上组织多个Express服务器?

我正在使用一台服务器来托管多个Node.js网络应用程序,这些应用程序分布在多个域中.我目前的做法是为不同端口上的每个应用程序运行Express服务器,并运行只是将请求路由(重定向)到正确的端口/ Express服务器的基本服务器.这有效,但这意味着我的基本服务器正在路由每个HTTP请求(并通过手动重定向),并且我的用户将我的应用视为托管在[hostname.com]:8000.

经过一些研究,我发现我可以使用http-proxy来满足我的路由需求,但我仍然想知道在同一系统上运行多个Express服务器是否有最佳实践.这是我计划如何做的:

每个Web应用程序都有自己的文件夹,具有完整的Express文件夹结构(app.js,路由,视图等).应用程序将按域分组,因此示例文件夹结构将是:

    hostname.com/
        app.js
        routes/
        views/
        ...
        app1/
            app1.js
            routes/
            views/
            ...
        app2
        ...
    hostname2.com/
        app.js
        routes/
        views/
        ...
Run Code Online (Sandbox Code Playgroud)

我将不得不分别用节点(或永远,我目前正在使用)运行每个app.js ,并且每个都必须在内部使用不同的端口,并且跨应用重定向指向端口目标应用.

那么,这是我目前的计划.有什么问题,我应该避免哪些陷阱?最重要的是,是否有针对此问题的既定解决方案 - 使用Node.js/Express在同一系统上托管多个Web应用程序的问题?

编辑:我计划最终使用WebSockets和HTTPS,我的设置可以支持的带宽量对我来说并不重要 - 这是一个开发服务器(至少现在).感谢David Ellis提出的WebSockets问题.

第二次编辑:感谢EhevuTov和David Ellis的回答,两者都有很大帮助.我仍在为我的应用程序确定一个整体结构,看起来这个问题通过StackOverflow问题得到了详细解决

第三次编辑:自从发布这个问题以来我已经找到了一些方法(尽管我还有很长的路要走).在我的GitHub存储库中查看这个文件,它利用了我从这个问题的答案中学到的东西!

multiple-domains http-proxy vhosts node.js express

44
推荐指数
2
解决办法
2万
查看次数

如何通过sudo在生产模式下运行node.js Express?

我正在使用节点版本为.0.6.5 的npm package express版本2.5.2.我似乎在Debian 4.4.5上运行bash版本4.1.5.

我正在尝试在生产模式下运行我的服务器,但它仍然在开发模式下运行.

我在我的bash shell中运行这些命令:

$ export NODE_ENV=production
$ echo $NODE_ENV
production
$ sudo echo $NODE_ENV
production
$ sudo node bootstrap.js
Run Code Online (Sandbox Code Playgroud)

我在bootstrap.js中有这个代码:

var bootstrap_app = module.exports = express.createServer();
//...
console.log(bootstrap_app.settings.env);
Run Code Online (Sandbox Code Playgroud)

这是我看到的标准印刷出来的:

development
Run Code Online (Sandbox Code Playgroud)

这是我的用法或系统的问题吗?

编辑: 感谢ThiefMaster正确识别此问题源于我作为root运行节点.ThiefMaster建议使用iptables从端口80转发到非特权端口,但是我的系统给了我一个错误.将此讨论发送到superuser.com或serverfault.com(链接到后面)

development-environment environment-variables production-environment node.js express

8
推荐指数
1
解决办法
1万
查看次数

PHP 5.6:headers_sent间歇性地返回true,空文件名和第0行

我在我的PHP脚本(PHP 5.6,Apache 2.2)中间歇性地遇到了这个问题:

警告:无法修改标头信息 - 已在第55行的/path/to/index.php中发送的标头

这个警告没有我在其他问题中看过的"发送者"部分,所以我在犯罪header()setcookie()调用之前添加了这段代码:

if (headers_sent($filename, $linenum)){
    echo("Output buffer: #" . ob_get_contents() . "#");
    echo "Headers already sent in $filename on line $linenum: ";
    print_r(headers_list());
}
Run Code Online (Sandbox Code Playgroud)

这是问题发生时我得到的输出:

Output buffer: ##
Headers already sent in on line 0:
Array (
  [0] => X-Powered-By: PHP/5.6.23
  [1] => Content-type: text/html; charset=UTF-8
)
Run Code Online (Sandbox Code Playgroud)

(旁注:我在php.ini中将output_buffering设置为4096字节,所以这两个标题中的63个字符是否应该被缓存并等待更多,而不是过早发送?)

第一次启动包含Web服务器的Docker容器时出现此问题.之后,当我第一次访问我的网站(可能是一两个小时),当我打电话并登录用户或重定向到登录页面时,它只会(但不总是)发生.header()setcookie()

我已阅读并重读了一般"已发送标题"错误的答案,并且尽我所能,我已排除了这些可能的原因:

  1. HTML块或调用print,echo等等.在我调用setcookie()header()
  2. 我的PHP标签之外的空格
  3. 物料清单
  4. auto_prepend_file php.ini设置
  5. gzip流编码 - …

php php-extension http-headers php-5.6

8
推荐指数
1
解决办法
537
查看次数

我应该使用什么HTML5 Canvas工具来制作纸牌游戏?

我正在寻找使用HTML5 Canvas和JavaScript创建一个纸牌游戏,我想知道什么Canvas工具可以让我的生活更轻松.

我找到了CreateJS并在其上做了一些笔记:

  • 用于简化与HTML5/CSS/JS的复杂交互的库/工具套件
    • EaselJS - HTML5 Canvas顶部的抽象层
    • SoundJS - HTML5音频的抽象层
    • TweenJS - 用于动画HTML5和CSS属性的库(很酷的缓动演示)
    • PreloadJS - 用于预加载资产的库(JS,图像,声音,数据等)
  • 文档似乎很全面
  • 很多演示 ; 没有入门指南/教程
  • 免费和开源(由Adobe和Microsoft赞助)

还有哪些其他工具/引擎可用于为浏览器制作纸牌游戏?

工具/框架的奖励点可以帮助我在HTML5 Canvas之外.我在后端使用Node.js,并计划使用Socket.IO/Express/MongoDB,因为这就是我所知道的.

注意:我在此Google Doc中收集了有关游戏引擎/工具(包括上面的CreateJS注释)的一些注释.随意添加您的观点到这个文档.

javascript game-engine node.js html5-canvas

7
推荐指数
1
解决办法
9343
查看次数

我的node.js Express代码中的SyntaxError

所以我试着按照这个教程视频:

http://nodetuts.com/tutorials/13-authentication-in-express-sessions-and-route-middleware.html#video

因此我在我的routes/index.js文件顶部有这个代码:

var todo = require('../todo'); //line 1
//line 2
//new session //line 3
exports.newSession = function (req, res) { //line 4
  res.render('sessions/new', { //**line 5**
    locals: {
      redir: req.query.redir
    }
  });
};
Run Code Online (Sandbox Code Playgroud)

但是,当我运行我的应用程序并触发routes.newSession处理程序时,我收到此错误:

500 SyntaxError: Unexpected identifier
at Object.Function (unknown source)
at Object.compile (/home/admin73464/todo/node_modules/jade/lib/jade.js:161:8)
at Function.compile (/home/admin73464/todo/node_modules/express/lib/view.js:65:33)
at ServerResponse._render (/home/admin73464/todo/node_modules/express/lib/view.js:414:18)
at ServerResponse.render (/home/admin73464/todo/node_modules/express/lib/view.js:315:17)
at /home/admin73464/todo/routes/index.js:5:6
at callbacks (/home/admin73464/todo/node_modules/express/lib/router/index.js:272:11)
at param (/home/admin73464/todo/node_modules/express/lib/router/index.js:246:11)
at pass (/home/admin73464/todo/node_modules/express/lib/router/index.js:253:5)
at Router._dispatch (/home/admin73464/todo/node_modules/express/lib/router/index.js:280:4)
Run Code Online (Sandbox Code Playgroud)

我的index.js文件中没有看到任何语法错误; 你呢?我应该在别的地方寻找吗?

提前致谢!

编辑:这是我的views/sessions/new.jade文件的内容:

h1 …
Run Code Online (Sandbox Code Playgroud)

syntax-error node.js express

1
推荐指数
1
解决办法
3335
查看次数