使用AngularJS和节点

时间:2017-09-07 11:56:25

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

我有一个问题。在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级别管理它?

1 个答案:

答案 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未经授权的响应。

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