我有一个问题。在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'));
});
还是有棱角的?我很困惑。请帮忙。
编辑: 我还有一个问题。在这里进行身份验证的正确方法是什么?用户数据应该通过角度作为jsons发送到服务器,或者更好地使用'form'元素在html级别管理它?
答案 0 :(得分:0)
从我看到的东西来看,你没有充分利用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),旁边是所有片段和控制器/工厂... < / p>
现在关于保护您的路线,或者主要是因为您需要将Express路线从服务Html文件切换到服务Json数据,我们将保护数据路由,没有比使用Passport更好的解决方案 并实施其中的一项策略。
使用Passport,您可以实现Json Web Token和Social登录以及其他许多功能,并将它们添加到您的路由中,您只需要以下内容:
app.get('/chat', passport.authenticate('jwt', {
session: false
}), (req, res) => {
});
它只是作为一个快速中间件,如果它发现你的请求遵守你创建的安全规则,它将通过它或其他它将给你403未经授权的响应。
我认为这包含了你需要的一切。