Tag: devise模式

在Javascript中分享服务器和客户端之间的代码是什么意思?

我会诚实地说,在挖掘NodeJS的时候,我不太理解一个概念。 这个概念是关于NodeJS如何让我们在服务器和客户端之间共享代码。 这是什么意思? 这是否意味着我可以编写一个函数,我可能调用客户端,并将其作为远程方法调用,或者是否代码复制到客户端并执行? 有人可以给我一些直观的例子,我可以把我的头围绕吗?

使用Node.JS

昨天晚上我转储Windows 7和格式化我的硬盘驱动器端口到基于Linux的操作系统,纯粹是因为我想开始使用Node.JS 所以我已经安装Node.JS ,并做了一些testing的东西,http服务器和套接字等 我想要做的是构build一个与MVC框架紧密集成的HTTP服务器,但在开始之前,我需要学习如何在Node中高效地构build。 例如,在PHP作为我的框架,我会创build一个启动加载系统来加载所有的基类等,然后我会启动我的事件系统准备开始附加callback。 我会继续处理请求等,直到生成输出,然后发送到输出处理程序,将处理标头等 但是Node为这个全新的环境,而且我想知道在Node中构build一个系统的最佳实践。 我正在寻找的信息更多的是与devise结构有关,而不是实际的应用程序编码,如何加载lib库在哪里加载库等等 任何帮助表示赞赏。 到目前为止,我的Web应用程序正在顺利进行,我已经build立了我的应用程序相当传统和一点程序。 我已经开始创build一个目录结构,如下所示: <root> startup.js /public/ favicon.ico /images/ /stylesheets/ /javascripts/ /system/ init.js config.js /libs/ /exceptions/ http.js server.js /application/ /views/ /_override/ /errors/ generic.view /partials/ sidebar.voew index.view /controllers/ index.js /models/ users.js 这个目录结构就像大多数基于MVC的Web应用程序一样,所以使用这个方法我觉得很舒服。 启动文件是由节点执行什么作为入口点, node startup & ,看起来像这样: /* * Header of t he file, Copyright etc */ var […]

Mongoosevariables键名

我有一个mongo对象,并希望通过mongoose访问我的web应用程序。 我定义的模式有一个Object存储用户ID和一个三级值(是的,也许或不)。 例如 "user_info": { "<id_value_1>": "y", "<id_value_2>": "n" } 上面的id_value_* s是用户会话ID,所以是一串长长的随机字符。 我如何创build一个mongoose Schema呢? user_info: {String, String}工作? 我可以重构它,以便user_info是一个对象数组{ "sessionid": "<value>", "value: "y"} ,这将是好的,这是最好的select?

可以在node.js模块中asynchronous初始化导出吗?

由于MongoDB数据库访问和初始化在Node.js上是asynchronous的,所以我想为每个集合定义一个模块,在db初始化之后导出包装数据库调用。 这样的“Cars.model.js”模块看起来像这样: var db = require("mongodb"); db.collection("cars", function(err, col) { exports.getCars = function(callback) { col.find({}, callback); }; }); 以便其他模块可以运行: var carModel = require("Cars.model.js").getCars; getCars(err, cars) { // (do something with cars here…) }; 它发生在我身上, getCars是未定义的,因为数据库访问尚未初始化时,我的第二个模块运行。 你如何处理创build这样的asynchronous数据库模型?

node.js中的类方法

我一直在尝试在最后一个小时用findOne,findOneOrCreate等方法为passport.js编写一个用户模块,但是不能正确使用它。 user.js的 var User = function(db) { this.db = db; } User.prototype.findOne(email, password, fn) { // some code here } module.exports = exports = User; app.js User = require('./lib/User')(db); User.findOne(email, pw, callback); 我经历了几十个错误,主要是 TypeError: object is not a function 要么 TypeError: Object function () { function User(db) { console.log(db); } } has no method 'findOne' […]

node.jsdevise一次创build数据库连接的模式

我正在寻找关于在我的node.js应用程序中创build数据库连接的devise模式的帮助。 这似乎很明显: 模块1: var db; exports.get_db = function(callback) { if (db == null) { dblibrary.create(connection_params, function(error, conn) { if (error == null) { db = conn; callback(null, db); } }); } else { callback(null, db); } }; 模块2: exports.do_something = function () { module1.get_db(function (err, conn) { if (err == null) { // continue using […]

获取执行上下文的Node.js编程模式

我在node.js中编写一个web应用程序 现在,服务器上的每个处理都始终处于会话的上下文中,当请求到达服务器时,会在第一阶段检索或创build该会话。 之后,执行stream程将通过多个模块和callback。 我正在努力的是创build一个编程模式,以便在代码中的任何一点,会话对象是可用的,没有程序员要求它在每个函数调用中作为parameter passing它。 如果所有的代码都在一个单独的文件中,我可能有一个闭包,但是如果有其他文件中的其他模块的函数调用,我如何编程,使会话对象在被调用的函数中可用,而不传递它作为参数。 我觉得这两个文件中的两个函数应该有一些联系,但是如何安排这个就是我陷入困境的地方。 总的来说,我想说总有一个执行上下文可能是一个会话或networking请求,其处理分散在多个文件中,并且执行上下文对象在所有点上都是可用的。 实际上可以有多个用例,例如每个networking请求有一个Log对象或每个会话有一个Log对象。 做这项工作所需的pipe道应该是横向安装的,不需要应用程序员烦恼。 他只知道执行上下文在所有地方都可用。 我认为这应该是大家面对的普遍问题,所以请给我一些想法。 以下是问题 MainServer.js app = require('express').createServer(); app_module1 = require('AppModule1'); var session = get_session(); app.get('/my/page', app_module1.func1); AppModule1.js app_module2 = require('AppModule2'); exports.func1 = function(req,res){ // I want to know which the session context this code is running for app_module2.func2(req,res); } AppModule2.js exports.func2 = function(req,res){ // I […]

如何在多个其他函数完成后才执行Javascript函数?

我的具体问题是,我需要执行(可能)大量的Javascript函数来准备像batch file(每个函数调用添加一些信息到同一个batch file),然后,所有这些调用完成后,执行一个最终函数发送batch file(比如说,把它作为HTML响应发送)。 我正在寻找一个通用的JavaScript编程模式。 泛化问题:给定Javascript函数funcA(),funcB()和funcC(),我会找出命令执行的最佳方法,以便funcC和funcB执行后才执行funcC。 我知道我可以使用这样的嵌套callback函数: funcA = function() { //Does funcA stuff funcB(); } funcB = function() { //Does funcB stuff funcC(); } funcA(); 我甚至可以通过传递callback参数来使这个模式更加普遍,但是这个解决scheme变得非常冗长。 我也熟悉Javascript函数链接,解决scheme可能如下所示: myObj = {} myObj.answer = "" myObj.funcA = function() { //Do some work on this.answer return this; } myObj.funcB = function() { //Do some more work on […]

构buildnode.js中需要的库的最佳实践

我有几个实用程序库,其中包含帮助函数,我想加载它们,以便他们可以从控制器使用,我想知道在节点中编码实用程序库的最佳做法是什么。 我有点困惑,因为有几种方法来做到这一点,我不知道什么是最好/更合适/更可靠。 这里有2个选项,但我想知道,如果他们是最好的(例如,我已经看到使用module.exports = exports = function(){}等片段) //option1.js "use strict"; module.exports = function(){ exports.test1 = function(){ console.log('hi I'm test1')}; exports.test2 = function(){ console.log('hi I'm test2')}; return exports; }; //option2.js "use strict"; module.exports = { test1 : function(){ console.log('soy test1')}, test2 : function(){ console.log('soy test2')} }; //test_controller.js /* Requiring helpers in different ways */ var option1 […]

可扩展的Node.js应用程序架构

过去,我只在本地机器上玩过Node.js,所以我只有单进程Node.js应用程序的经验。 现在我想创build一个Web应用程序,我可以在网上发布。 这个networking应用程序就像多人游戏 – 使用Socket.IO进行客户端 – 服务器通信,使用Express处理HTTP请求,使用Grunt进行任务pipe理等等 – 我还想使用其他NPM软件包以执行各种任务。 我想devise这个应用程序的体系结构 启用横向可伸缩性(后来,当我有很多访问者,我不必重写整个应用程序) 最大限度地减less对不同执行环境的依赖(最大化可移植性) 我怎样才能实现这个使用节点? 我想高级架构将包括: 不同的服务器进程 (每个进程将运行一个Express实例并处理传入的HTTP请求)。 应该有一个负载平衡器的地方。 可选: 后台进程可以定期运行并处理“共享数据” 由于我的应用程序是一个多人应用程序,每个用户都可以与其他在线用户交互,所以我应该在某个地方存储一些可以在这些进程之间共享的共同状态 (“共享数据”)。 为了简单起见,起初我不必坚持这个共享数据,所以我想我应该使用像Redis这样的内存数据存储。 大图像看起来像这样: 这个devise提出了一些问题: 如何产生过程? 我应该使用Node的child_process还是cluster模块并手动启动工作进程? 顺便说一句,是否有可能手动启动这些,例如,如果我的应用程序部署到Heroku或Nodejitsu ? 或者: is there a better way to store these information in a config file? 我的意思是,如果我可以configuration多less个服务器实例,而不是编辑代码而是一个configuration条目,会更好。 系统边界? 如果我手动产生进程,那么(我猜)所有进程都会在同一个(虚拟)服务器上运行。 如果这个服务器有4个CPU内核,那么你最多可以产生4个Node实例,因为如果你产生了更多的CPU,你的CPU将会产生上下文切换,这会损害整体性能。 如果我需要更多的stream程实例,我该怎么办? 假设我需要100个服务器实例。 我必须将我的应用程序部署到25台服务器,并在每台服务器上产生4个进程? 在我看来,像Nodejitsu这样的主机服务以某种方式隐藏了你的这个系统边界层,但我不明白它在实践中是如何工作的。 特别是有这个“共享数据”提供者组件。 我想这个提供者(比如一个Redis服务器)必须运行在不同的服务器上,这样它才能被所有进程使用。 但在这种情况下,很容易成为瓶颈,不是吗? 负载平衡器? 如果我使用一些托pipe服务,我必须自己设置负载均衡器层吗? […]