Geddy.JS:简单易用的 MVC Node.js 框架

简介


Geddy是一个基于Ruby on rails方法的全栈开源MVC框架,具有内置的身份验证模块、passportjs和Socket.IO集成。在Geddy中创建实时安全应用程序只需要几个命令;它提供了一组非常大的生成器命令,这些命令通过命令行界面工作,自动执行大多数重要任务,如创建模型、控制器、视图,甚至身份验证或Socket.IO集成。在Geddy中,您只需专注于主要应用程序逻辑,让Geddy负责其余部分。

它还支持多种模板引擎,默认的模板引擎是ejs。您可以在创建新项目或资源时指定项目的模板引擎。

Geddy使用Node的内置集群模块,该模块利用您的多核处理器。因此,您的node.js应用程序不再是单线程应用程序,而是自动利用多核。

安装


安装NodeJS和NPM的前提条件:

Sudo apt-get安装python-软件-属性python g++make

如果您使用的是Ubuntu 12.10或更高版本,则还需要执行以下操作:

Sudo apt-获取安装软件-属性-通用

添加PPA Repository,这是Joyent(Node.js的维护者)推荐的:

sudo add-apt-repository ppa:chris-lea/node.js

更新系统包列表:

1sudo apt-get update

安装包含NPM的Node.js:

Sudo apt-Get Install NodeJS

在全球范围内安装Geddy和杰克

Sudo NPM安装-g Geddy

在这里,我们在全球安装Geddy,这样我们就可以使用Geddy发电机。

了解Geddy结构


每个基于MVC原则的Geddy应用程序都有一个单独的目录和文件:模型、控制器和视图。

Geddy应用程序的典型结构如下

Geddy Structure

Geddy生成器


Geddy生成器是一个可供我们使用的命令列表,用于简化我们的开发过程。

Geddy gen命令-它用于生成新的应用程序、模型、控制器,并为您做其他各种日常开发家务。

1geddy gen app your_app

这将在您的工作目录中名为YOUR_APP的目录中创建一个名为YOUR_APP的Geddy应用程序。

1geddy gen resource profile name:string

这将创建一个名为),模型具有属性名称,类型为字符串。如果不提及类型,则会自动设置为字符串类型。 您可以在这里提到您的属性,或者稍后在位于app/Models/profile.js的模型文件中手动输入它们。

1geddy gen secret

此命令将删除任何现有机密,并为您的应用程序创建新机密。Session Secret用于计算散列,因此如果没有密钥,对会话的访问将被拒绝,从而保护您免受会话劫持等。此命令不带任何参数

1geddy gen controller

这个命令创建一个控制器以及一个索引视图和一个访问控制器的路由

1geddy gen model notes title:default content:string

该命令生成一个具有两个名为标题和内容的字符串属性的模型。在这里,显示模型时使用默认属性。如果您希望将整数类型作为默认属性,则可以执行TITLE:INT:Default。在Geddy中,始终会创建ID属性,如果未提及ID属性,则该属性为默认属性。此ID与创建的对应MongoDB文档匹配。

1geddy gen scaffold personal_detail name:string

该命令构建了一个名为Personal_Detail的资源以及一个Personal_Detail的模拟视图,您可以在其中添加、查看和删除浏览器本身中的单个条目。

搭建时,您还可以选择指定要用于创建的视图的模板引擎。您可以使用swig,jade,handle或mustache模板引擎,如果没有提到,则使用EJS。例如:

1geddy gen scaffold personal_detail --jade

创建内置Facebook认证的应用


搭建了一个样例应用程序。

Geddy Gen应用程序Edupi

移到目录中。

1cd Edupi

将基于passport.js的身份验证搭建到应用程序中。

注意: 您不应将身份验证搭建到旧应用程序中,因为它可能会覆盖您的代码。

1geddy auth

请访问developers.facebook.com并按照以下步骤获取您的应用程序的密钥。

点击应用程序

点击创建新应用(必须注册)

输入应用程序名称和其他相关信息,然后单击继续。

点击带有Facebook登录的网站,然后输入服务器的URL或IP。您可以输入虚拟服务器的IP,如http://192.168.1.2:80/;如果您在本地服务器上测试应用程序,则可以输入http://localhost:4000/。如果你看到一个不同的屏幕,点击编辑应用程序进入这个屏幕。

记下App ID和App Secret,然后单击保存更改。

注意: 切勿与任何人分享您的App ID和App Secret。我这么做是为了尽量减少混淆。

现在返回服务器的目录,并在Edupi文件夹中打开config/icis.json文件。

 1{
 2	 "passport": {
 3"successRedirect": "/",
 4"failureRedirect": "/login",
 5"twitter": {
 6  "consumerKey": "XXXXXX",
 7  "consumerSecret": "XXXXXX"
 8},
 9"facebook": {
10  "clientID": "XXXXXX",
11  "clientSecret": "XXXXXX"
12},
13"yammer": {
14  "clientID": "XXXXXX",
15  "clientSecret": "XXXXXX"
16}
17  }
18}

其中,SUCCESS REDIRECT为授权成功时返回的路径;Failure ReDirect为授权失败时用户被重定向的url。请注意,您只允许传递相对链接。例如,设置成功重定向http://localhost:4000/login/将返回错误。如果您更改了路由,您可以同时更改这两个URL。

客户端ID填写AppID,客户端密码填写App Secret,如下所示。

 1{
 2 "passport": {
 3"successRedirect": "/",
 4"failureRedirect": "/login",
 5"twitter": {
 6  "consumerKey": "XXXXXX",
 7  "consumerSecret": "XXXXXX"
 8},
 9"facebook": {
10  "clientID": "670657392948407",
11  "clientSecret": "1beefd26e84f7e7adb4eb8a371c41af8"
12},
13"yammer": {
14  "clientID": "XXXXXX",
15  "clientSecret": "XXXXXX"
16}
17  }
18}

您可以获取Twitter和Yammer应用程序设置,然后如上图所示进入以使它们正常工作。如果你找起来有困难,你可以搜索一下。

现在保存文件并使用以下命令运行服务器

1geddy app

瞧,现在你的Geddy应用程序中内置了Facebook集成。在身份验证时,有两个项被添加到用户的会话中,这两个项是UserID(用户的MongoDB ID和Authtype,在本例中将是Facebook)。

您可以在控制器中对照这些变量进行检查,以便在虚拟服务器上执行请求之前对其进行身份验证。

在Geddy中使用HTTPS


Geddy通过SSL/TLS或SPDY支持HTTPS。要启用它,只需将证书的详细信息添加到配置文件中。密钥和证书选项是必需的,而可用于HTTPS和SPDY模块的其他选项是可选的。

要添加SSL/TLS,只需在配置文件中添加以下行:

1// ...
2, ssl: {
3key: 'config/key.pem',
4cert: 'config/cert.pem'
5  }
6// ...

要添加对SPDY的支持,请添加以下命令:

1// ...
2, spdy: {
3key: 'config/key.pem',
4cert: 'config/cert.pem'
5  }
6// ...

这里假设key.pem和cert.pem放在配置文件夹中。剩下的就由Geddy负责了。

进入生产模式


创建一个名为app.js的文件,其中包含以下内容。

1var geddy = require('geddy');
2
3geddy.start({
4environment: 'production'
5});

然后使用Forever运行您的服务器,以防止您的应用程序宕机

要永久安装

1sudo npm install forever -g

然后,要启动应用程序,请转到终端中包含app.js的目录并运行

1forver start app.js

现在,你的应用程序将自动启动,以防崩溃。

Submitted By: Bhanu Chaudary
Published At
Categories with 技术
Tagged with
comments powered by Disqus