我是一个客户端的人,刚刚进入服务器端的 JavaScript世界.我有这个想法,我想我想要构建我的第一个Nodejs应用程序.我想要一个服务器端,几乎只提供一个空的shell和大量的JSON.我想将其余的逻辑放在装有Backbone.js的前端.

所以我快速的打了一个小应用程序(代码在底部),我有几个问题.

>会话变量是否安全?我可以使用会话变量来存储稍后读取以获取敏感日期的用户标识符.是否可以修改会话变量,以便在我的情况下,一个用户可以抓住另一个用户的数据?
>按照我在’/ profile’路线上的方式来提供JSON是有意义的.在我的应用程序中,将有很多路线就像那个.从数据库中获取东西并将其作为JSON提供给客户端的路由.
看我的代码,你有什么提示或技巧吗?我应该做的不同.模块我可能应该看看?
>我的想法几乎只有JSON的后端是有意义的吗?

我的应用程序在下面.

var facebook = {
    'appId'         : "my app id",'appSecret'     : "my app secret",'scope'         : "email",'callback'      : "http://localhost:2000/"
}

var express         = require('express');
var MongoStore      = require('connect-mongo');
var auth            = require('connect-auth')
var UserProvider    = require('./providers/user').UserProvider;
var app             = module.exports = express.createServer();

// Configuration
app.configure(function(){
    app.set('views',__dirname + '/views');
    app.set('view engine','jade');
    app.use(express.bodyParser());
    app.use(express.methodoverride());
    app.use(express.cookieParser());
    app.use(auth([auth.Facebook(facebook)]));
    app.use(express.session({secret: 'my secret',store: new MongoStore({db: 'app'})}));
    app.use(express.compiler({ src: __dirname + '/public',enable: ['less'] }));
    app.use(app.router);
    app.use(express.static(__dirname + '/public'));
});

app.configure('development',function(){
    app.use(express.errorHandler({ dumpExceptions: true,showStack: true })); 
});

app.configure('production',function(){
    app.use(express.errorHandler()); 
});


// Providers
var UserProvider = new UserProvider('localhost',27017);

// Routes
app.get('/',function( request,response ) {

    if( !request.session.userId ) {
        request.authenticate(['facebook'],function(error,authenticated) {
            if( authenticated ) {
                request.session.userId = request.getAuthDetails().user.id;
            }
        });
    }

    response.render( 'index.jade' );

});

app.get('/profile',response ) {

    response.contentType('application/json');
    if( request.session.userId ){
        UserProvider.findById( request.session.userId,function( error,user ){
            var userjson = JSON.stringify( user );
            response.send( userjson );
        });
    } else {
        response.writeHead(303,{ 'Location': "/" });
    }

});

app.get('/logout',response,params ) {

    request.session.destroy();
    request.logout();
    response.writeHead(303,{ 'Location': "/" });
    response.end('');

});

app.listen(2000);
console.log("Express server listening on port %d in %s mode",app.address().port,app.settings.env);

解决方法

我认为你有正确的想法,虽然我会抛出几个想法:

>定义路由 – 如果您定义了大量路由,特别是使用JSON,则可能需要通过MVC类型框架动态定义它们.您可以找到这个in the express samples here的一个很好的例子.它将为您节省大量手写路由,您可以将节点对象作为JSON传回客户端,而不会在服务器端执行其他任何操作.
>服务器上的主干 – 如果你想要一点点疯狂(我从来没有使用过这种技术),Development Seed已经建立了一个名为bones的框架,即uses backbone on the server side.
>登录示例 – 有关用户会话管理的a good tutorial over at DailyJS.
>可访问性 – 只要您没有可访问性问题,通过REST API提供数据是有道理的.如果您必须担心合规性或其他javascript限制,可能会遇到问题.

对于安全性,将会话超时设置为较低的值并选择适当的密钥可能会有助于确保某人无法生成会话cookie(默认情况下实际数据不存储在客户端上).我不知道node.js使用什么算法来生成会话cookie.以下是express session middleware的一些细节.

javascript – 如何在服务器端构建Node,Express,Connect-Auth和Backbone应用程序?的更多相关文章

  1. HTML5 播放 RTSP 视频的实例代码

    目前大多数网络摄像头都是通过 RTSP 协议传输视频流的,但是 HTML 并不标准支持 RTSP 流。本文重点给大家介绍HTML5 播放 RTSP 视频的实例代码,需要的朋友参考下吧

  2. 利用Node实现HTML5离线存储的方法

    这篇文章主要介绍了利用Node实现HTML5离线存储的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. 详解如何通过H5(浏览器/WebView/其他)唤起本地app

    这篇文章主要介绍了详解如何通过H5(浏览器/WebView/其他)唤起本地app的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  4. H5混合开发app如何升级的方法

    本篇文章主要介绍了H5混合开发app如何升级的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  5. AmazeUI 折叠面板的实现代码

    这篇文章主要介绍了AmazeUI 折叠面板的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码

    这篇文章主要介绍了HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

  7. HTML5 Web缓存和运用程序缓存(cookie,session)

    这篇文章主要介绍了HTML5 Web缓存和运用程序缓存(cookie,session),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. Html5 video标签视频的最佳实践

    这篇文章主要介绍了Html5 video标签视频的最佳实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  9. html5唤起app的方法

    这篇文章主要介绍了html5唤起app的方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. HTML5拍照和摄像机功能实战详解

    这篇文章主要介绍了HTML5拍照和摄像机功能实战详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部