【问题标题】:Handling views with AngularJS and node使用 AngularJS 和节点处理视图
【发布时间】:2017-09-07 11:56:24
【问题描述】:

我有一个问题。在 AngularJS 中管理客户端视图和服务器端应用程序节点的正确方法是什么?

我正在开发具有登录/注册功能的简单聊天应用程序,其中包含两个 html 文件 - 带有登录/注册表单的“index.html”和带有聊天窗口的“chat.html”等。这两者之间的切换应该由节点完成像这样(尚未实现身份验证):

const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io').listen(http);
const path = require('path');

app.use(express.static(path.resolve('../client/')));

app.get('/', function (req, res) {
    res.sendFile(path.resolve('../client/html/index.html'));
});

app.get('/chat', function (req, res) {
    res.sendFile(path.resolve('../client/html/chat.html'));
});

还是角度?我很困惑。请帮忙。

编辑: 我还有一个问题。在这里进行身份验证的正确方法是什么?用户数据应该通过 Angular 作为 jsons 发送到服务器,还是使用 'form' 元素在 html 级别上管理它更好?

【问题讨论】:

  • 多个问题是一个糟糕的选择。你应该阅读How to Ask
  • 好的,我下次坚持这个。

标签: javascript angularjs node.js user-interface routing


【解决方案1】:

好吧,从我所看到的情况来看,您并没有充分利用 Angular 的 SPA 功能,因此正确的做法如下: 我你可以允许我稍微修改一下你的代码,我会这样做

const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io').listen(http);
const path = require('path');

//Serving here your whole public or dist files.
app.use("/", express.static(path.join(__dirname, '../../dist/')));

//Instead of returning pages you return Json data. 
app.get('/chat', function (req, res) {

});

主要思想是只发送一个 index.html 文件,这个文件将在所有片段和控制器/工厂旁边托管您的 AngularJS 代码和前端路由(ng-router/ui-router)...

现在关于保护您的路线,或者主要是因为您需要将 Express 路线从提供 Html 文件切换到提供 Json 数据,我们将保护数据路线,没有比使用 Passport 更好的解决方案 并实施其中一项战略。

使用Passport,您可以实现 Json Web Token 和社交登录等等,并将它们添加到您的路线中,您只需要以下内容:

app.get('/chat', passport.authenticate('jwt', {
        session: false
}), (req, res) => {

});

它将仅充当快速中间件,如果它发现您的请求符合您创建的安全规则,它将通过它,否则它将给出您的 403 未经授权的响应。

我认为这包含了您需要的一切。

【讨论】:

  • 好的,所以我只在一个路由上返回html:“/”,并且聊天视图是通过在“/chat”上用角度调用get请求来访问的,在早期验证用户之后应该做什么?
  • 通常情况下,您只想在 Angularjs 路由中返回一个 index.html,因此在您的 ui.router 或 ng-router 路由中,您将把 /chat 路由放在那里call 将从您的 nodejs 路由中获取数据,这些路由将受到保护。
  • 但是视图切换应该是通过angular来完成的吧?
  • 当然通过你的角度路线,如果这个答案帮助你给它投票,那么它可以帮助其他人:)
  • 我想我知道了。谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-08-21
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
相关资源
最近更新 更多