【问题标题】:Architecture with http server, websocket and express具有 http 服务器、websocket 和 express 的架构
【发布时间】:2016-08-06 15:09:41
【问题描述】:

我正在尝试使用 NodeJs“http-server”、“express”和“web socket”创建一个网站。基本上,“http-server”正在监听端口“8080”,在“index.html”页面上,我有一个简单的表单来执行登录。

这就是我有点卡住的地方。实际上,我阅读了这篇文章 (https://auth0.com/blog/2014/01/15/auth-with-socket-io) 并试图重现身份验证过程。所以我正在尝试创建“express”应用程序来处理“/login”路由,但是,我有一个端口问题。我无法监听端口“8080”,因为它被“http-server”使用,并且我无法监听另一个端口,因为如果这样做,我对“/login”路由的 AJAX 调用将被阻止通过 CORS 系统。

我的目标很简单:我希望有一个提供 html/css 和 javascript 文件的网络服务器(因此是一个普通的网络服务器),但我也希望有一个使用“express”的“NodeJs”模块处理其余通信的登录和 websocket。我看到可以在同一个端口上使用“ws”和“express”,但我不知道如何才能通过网站启用 AJAX 登录。

【问题讨论】:

    标签: javascript ajax node.js sockets express


    【解决方案1】:

    您可以通过在 express 应用上设置 Access-Control-Allow-Origin 标头将 express 应用托管在其他端口上,而不会遇到 CORS 问题。您可以使用以下代码自动设置它:

    app.use(function (req, res, next) {
    res.header('Access-Control-Allow-Origin', 'your origin here');
    next();
    });
    

    该代码需要在您的路线处理之前。这样,您就可以为通过 express 应用程序的每个请求设置标头。

    【讨论】:

    • 像魅力一样工作,谢谢。你认为这是一个有效的架构还是我做的事情太麻烦了?
    • 这是一个有效的架构。我在自己的项目中使用类似的。祝你的项目好运。 :)
    • 非常感谢。最后一个问题:您如何处理 express 正在处理 web socket 路由的事实?我昨天睡觉前读到了“express-ws”,这似乎是解决方案,但也许它存在更简单的东西?
    • express-ws 看起来像是一个可靠的解决方案。根据文档,它似乎很容易使用。我没有使用 express 的 web sockets,所以我不知道是否有更好的选择。但这应该可行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多