热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【转】nodejs

          云计算 + 大数据  未来。         在中国的云计算上基本上是一个概念,个人感觉与当初的SOA没有太大的区别,空泛的理论。         中小型开发的
【转】nodejs【转】nodejs【转】nodejs



 

【转】nodejs

         云计算 + 大数据 = 未来。

         在中国的云计算上基本上是一个概念,个人感觉与当初的SOA没有太大的区别,空泛的理论。

         中小型开发的未来 = Node.JS + MongoDB解决,并不是说Java就没用了。

 

1、在前面的话

【转】nodejs

         2008年开始,就一直应清华大学出版社要求进行Java相关图书的编写工作。

 

【转】nodejs

 

         Java技术始终作为高端软件用户的首选,只要从事大型的软件开发,那么Java都是必须要使用的技术,尤其是在中国的相关项目之中,Java是会作为不二的选择。

         所有的服务器端技术本质上没有太多区别,都需要WEB Server,都需要一些基本的服务器端开发代码,都需要操作数据库,或者加入一些其他的操作支持。

         开发之中你们最大的难关:服务器端代码是写完了,可是如果在修饰界面有问题的时候,往往出面的还是你。缺少不同平台的交流。2003年之后开始流行的Web Service彻底的改变了这一个现状。

         发现,JSON作为数据的传输,以及前后台都采用Javascript应该可以方便的进行开发。

个人对Javascript看法:

         1   最早的时候我们经常会纠结于一个问题:数据的验证是在前台做还是在后台做?在这段时间之内,加上浏览器的战争,导致了Javascript无用论;

         2   2005年开始中国流行的AJAX技术开始,Javascript可以操作异步处理,而且使用DOM解析也可以动态的操作HTML页面,基于XML的数据传输;

         3   JQuery技术包装了一系列的DOM解析操作,简化了Javascript的操作;

         但是不管如何改变,在之前,Javascript可以做的工作只是在客户端运行。那么把Javascript能否修改一下,加强其功能,让其可以变成适合服务器端的开发,就造就了Node.JS

         今天的目的不是讲解Node.JS的相关语法,只是感受Node.JS的开发方便。

         个人推测:在PHP + MySQL逐步萎靡的今天,取代它们的应该就是Node.JS + MongoDB

 

 

2、使用Node.JS开发WEB应用

2.1、搭建开发环境

 

【转】nodejs

 

【转】nodejs

 

         Node.JS是一个平台,而且这个平台使用的C++开发,基于Javascript作为前台的表现语言。它是服务器端的语言,但是真的不需要去配置服务器。

 

【转】nodejs

 

【转】nodejs

 

 

【转】nodejs

 

         Node.js下载完成后需要首先进行安装。

【转】nodejs

【转】nodejs

 

 

【转】nodejs

 

 

【转】nodejs

【转】nodejs

 

         在使用Node.JS过程之中一定需要始终连接网络。总需要从网上下载相应的开发包。

         安装完成之后会出现相应的可执行命令,而现在这些命令不属于windows,所以需要将目录配置到path环境属性之中。不同路径之间要使用“;”分隔。

 

【转】nodejs

 

【转】nodejs

 

         Express是整个Node.js之中最为常用的一个框架(开发包),使用它可以方便的快速构建起一个WEB项目。

【转】nodejs

【转】nodejs

 

 

         首先Express是一个Node.js最为常用的一个开发包,那么应该首先将其下载,而且下载的方式分为两种:只针对于一个项目进行开发包的下载,或者是针对于整个Node.js开发环境。

         现在下载开发包:

npm install -g express

         之后会出现许多的提示信息,提示用户的相关下载的进度。

【转】nodejs

 

         下载完成之后,所有的全局包都保存在一个固定的目录:

C:\Documents and Settings\Administrator\Application Data\npm

 

【转】nodejs

         只要是开发项目,那么肯定需要一个保存项目的文件目录,此时的目录就将其定义为mldnnodedemo

mkdir mldnnodedemo

         而后进入到此目录之中(就想象为Eclipse的工作区,一个工作区之中可以定义多个项目。

cd mldnnodedemo

         下面是一个非常重要的步骤,需要创建一个express项目(有明确的文件夹要求)。

express -e myproject

【转】nodejs


【转】nodejs

 

【转】nodejs

         此时就表示项目建立完成了,就算你使用Eclipse的相关插件,也必须按照此步骤进行操作。而创建的项目之中存在

了一个app.js文件,那么这个文件就作为了整个程序运行的主文件出现,即:只需要执行它,就可以运行HTTP Server

http.createServer(app).listen(app.get('port'), function(){

  console.log('Express server listening on port ' + app.get('port'));  è System.out.println()一样,直接后台输出

});

         此时,http的服务将在3000端口上监听用户的请求。

         如果要想启动服务器,直接进入到myproject目录里面,输入:node app.js

         之前下载的express貌似有点问题,重新在本项目里面下载一个:“npm install express”。此时在myproject目录下也存在了node_modules目录,同时保存了express程序包。

         程序运行之后就会出现以下的提示信息:

Express server listening on port 3000

         表示在3000的端口监听。随后打开浏览器输入:http://localhost:3000

         继续安装ejsnpm install ejs

【转】nodejs

         这个就是默认显示界面。这个界面的内容保存在views目录下。

         但是现在有一个小小的问题出现了,如果要想运行Node.js程序,则现在只能够使用“node app.js”,而这样的运行方式,如果在app.js文件修改之后往往需要重新启动才可以加载新的内容,这对于开发是非常不方便的, 为此,可以使用一个supervisor组件包,它可以动态的加载修改之后的开发程序。

 

【转】nodejs

 

         下载:supervisor

npm install -g supervisor

         随后直接利用supervisor方式运行程序:

supervisor app.js

         以后项目之中,每一次文件的改变,那么都可以及时的监听到,同时也可以及时加载新的代码文件,对于开发是非常方便,但是有一点不方便:每一次修改的时候如果代码有错,后台会一直报错。

 

 

2.2、编写代码

         下面要进行正规的开发了,本次要开发一个简单的登录程序,而这个用户登录程序,也分为两个开发步骤完成:第一步:是固定的用户名和密码完成、第二步:是基于MongoDB进行的登录开发。

 

【转】nodejs

 

         之前通过代码可以发现,所有用户需要保存的页面都应该保存在views目录下,但是此时index.ejs是一个html页面,而有的人不习惯于使用ejs,习惯于使用html,为了解决这样的问题,则需要配置模板。

         定义加载的项目模块

var ejs = require('ejs') ; // require()函数表示要加载的模块

         需要增加一些相关的配置;

app.engine('html',ejs.__express) ;

app.set('view engine', 'html'); // 替换:app.set('view engine', 'ejs');

         views中的index.ejs文件修改为index.html文件,观察是否可以改变。

         下面编写一个用户的登录,登录的时候只提供用户iduserid)和密码,下面建立几个相关的操作页面:login.htmlwelcome.html。但是在建立这两个文件的时候,请一定要注意,文件的编码必须设置为UTF-8,否则无法操作中文。

范例:定义login.html

  

    

    

  

  

   

<%= title %>

         用户ID

           码:

         

         

范例:定义欢迎页 —— welcome.html

  

    

    

  

  

    

欢迎<%=user.userid%>光临!

         

注销

  

范例:修改index.html页面,增加登录的链接地址

  

    

    

  

  

    

<%= title %>

    

用户登录

   

  

         在每一个页面之中并没有定义直接的连接,因为Node.js依然属于MVC设计模式的范畴,所以针对于MVC的实现,此处所编写的全部都属于映射名称,所有的映射路径都需要通过app.js进行相应的路由配置。

 

【转】nodejs

 

【转】nodejs

 

app.get('/', routes.index);

app.get('/login', routes.login); // 此处还需要routes/index.js修改

app.post('/login', routes.doLogin);   // 处理post请求,表单提交

app.get('/logout', routes.logout);      // 处理注销

app.get('/welcome', routes.welcome);                 // 进入到首页

 

         而这个操作路径配置完成之后,还需要找到routes/index.js文件进行相关的回调函数的配置操作。

范例:修改index.js文件

 

 

 

exports.index = function(req, res){

  res.render('index', { title: 'Express' });

};

exports.login = function(req, res){

  res.render('login', { title: '用户登录' });

};

exports.doLogin = function(req, res){

         var user = {userid:'mldnadmin' , password:'hellojava'} ;      // 固定数据

         // 如果要想接收请求,通过req对象

         if (req.body.userid==user.userid && req.body.password==user.password) {

                   res.redirect("/welcome?uid=" + req.body.userid) ;      // 地址重写

         }

         res.redirect("/login") ;

};

exports.logout = function(req, res){

  res.render('login', { title: '用户注销' });

};

exports.welcome = function(req, res){

         // 如果是地址栏参数使用req.query.参数名称接收

         var user = {

                   userid : req.query.uid   }

  res.render('welcome', { title: '程序首页' , user:user });

};

         那么在整个的基础过程之中,最为重要的步骤就配置app.js中的路由,当然,路由的最终控制是通过index.js文件完成的,在这个文件就相当于Java中的Servlet功能,负责跳转。

3、利用MongoDB来解决数据库的登录问题

         MongoDB可以说是在以后未来发展之中,在中小型数据库的市场上一定是具备发展优势的数据库。而且与Node.js的结合也非常的方便,并且多种多样。

         MongoDBOracle数据库完全是不一样的操作结构:MongoDB使用的是文档存储,而Oracle采用的是表存储。

列名称

列名称

列名称

列名称

列名称

sdf

fsd

fsda

fsda

fsda

fdsa

fsdafdsa

fdsa

fsad

fsda

fsda

af

324

dsf

2342

 

【转】nodejs

 

3.1、搭建环境

 

【转】nodejs

 

         SQL:作为整个数据库的开发标准已经存在了几十年了,可是NoSQL技术最早的提出指的是不使用SQL使用。但是后来发现不能够离开SQL,所以NoSQL又被翻译为:Not Only SQL(不仅SQL)。

 

         下载MongoDBhttp://www.mongodb.org/

 

【转】nodejs

 

【转】nodejs

 

         下载下来的MongoDB是一个*.zip文件,直接将其解压缩后就可以使用了。但是在使用之前,还需要为其进行path环境的配置:D:\mongodb\bin

【转】nodejs

 

         以后使用mongodb暂时将其定义为在d盘上,所以现在需要在d盘上建立一个data/db的文件目录。

         随后打开一个新的命令行窗口,让路径设置在d盘路径下,首先启动mongodb服务:mongod.exe

 

Wed Aug 14 16:13:19.739 [initandlisten] MongoDB starting : pid=4344 port=27017 dbpath=\data\db\ 32-bit host=cab34d4eb860431

【转】nodejs

         Mongodb服务启动之后,下面也同样需要打开一个新的命令行窗口,使用mongo进行操作。

 

【转】nodejs

         打开命令行窗口输入:mongo.exe命令,启动mongodb的命令窗口。

范例:创建一个新的数据库(mongodb里没有数据库):

use mldndb

范例:设置一个users文档

db.users.insert({userid:'mldn',name:'lixinghua',password:'hello'}) ;

db.users.insert({userid:'mldnjava',name:'mole',password:'nodejs'}) ;

         此时可以通过show tables查看所有的集合,已经发现存在了users集合。下面查询全部:

db.users.find();

         此处为了方便,所以所有的密码并没有采用加密的处理方式。

         可是如果现在直接利用node.js提供的mongodb操作不方便使用。

 

【转】nodejs


         所以在处理mongodb的时候建议使用express-mongoose组件。

npm install express-mongoose

         此组件可以和express组件完美的搭档。

【转】nodejs

         
还需要下载一个mongoose的组件。:npm install mongoose

 

 

3.2、实现数据库验证

         mongodb配置完成之后,下面就首先需要定义一个与Users集合有关的新的组件。类似于VO类的概念,只不过现在这个类需要通过*.js文档描述,在routes目录下创建models.js文件。

【转】nodejs

范例:创建models.js文件

var mOngoose= require('mongoose') ;     // 定义使用组件

var Schema = mongoose.Schema ;  // 创建模式

var UserSchema = new Schema({

         userid : String ,

         name : String ,

         password : String

}) ;    // 定义了一个新的模式,但是此模式还未和users集合有关联

exports.User = mongoose.model('User',UserSchema) ;       // Users表关联

 

【转】nodejs

 

范例:修改index.js文件,使用新的组件模块

var mOngoose= require('mongoose') ;     // 导入组件

var models = require('./models') ;    // 导入自定义组件

var User = models.User ;       // 使用User模型,对应的users

mongoose.connect('mongodb://localhost/mldndb') ;    // 连接数据库

         现在最需要改变的就是doLogin操作,因为此处需要使用数据库验证。

         如果要想完成登录验证,只需要根据用户名和密码取得数据量即可。

db.users.count({userid:'mldn',password:'hello'}) ;

         只需要根据返回的数量就可以确定用户名和密码是否正确。

exports.doLogin = function(req, res){

         // 现在拼凑出了一个基本的字符串

         var query_doc = {userid:req.body.userid , password:req.body.password} ;    // 固定数据

         User.count(query_doc,function(err,doc){// 直接利用mongodb的命令进行操作

                   if(doc == 0) {      // 输入错误,没有此信息

                            res.redirect("/login") ;

                   } else {       // 成功

                            res.redirect("/welcome?uid=" + req.body.userid) ;      // 地址重写

                   }

         }) ;

};

         而且最为关键的是整个过程之中,不再去考虑数据库的关闭问题,极大的方便了用户开发。

 

4、总结

 

【转】nodejs


 

         可以发现,如果要实现Node.JS + MongoDB开发,最为痛苦的地方就是各个组件包的管理,而且最麻烦的是Node.JS之中有上万个组件包。

         使用这种轻量的开发方式绝对要比PHP + MySQL更加强大。


推荐阅读
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • 智能制造数据综合分析与应用解决方案
    在智能制造领域,生产数据通过先进的采集设备收集,并利用时序数据库或关系型数据库进行高效存储。这些数据经过处理后,通过可视化数据大屏呈现,为生产车间、生产控制中心以及管理层提供实时、精准的信息支持,助力不同应用场景下的决策优化和效率提升。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 如何利用Apache与Nginx高效实现动静态内容分离
    如何利用Apache与Nginx高效实现动静态内容分离 ... [详细]
  • 基于Node.js的高性能实时消息推送系统通过集成Socket.IO和Express框架,实现了高效的高并发消息转发功能。该系统能够支持大量用户同时在线,并确保消息的实时性和可靠性,适用于需要即时通信的应用场景。 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 如何运用蒙特卡洛方法计算NPV:计算机专业毕业设计遇到难题怎么办?
    许多计算机科学专业的学生在大学期间都会遇到这样的困扰:课堂上教授的内容往往偏向理论,实际应用的知识点讲解得较为浅显和概括,导致在进行毕业设计时,如运用蒙特卡洛方法计算净现值(NPV)等复杂问题时感到无从下手。本文旨在探讨如何通过深入理解和实践蒙特卡洛模拟技术,解决这类计算难题,为学生的毕业设计提供实用指导。 ... [详细]
  • 在Ubuntu系统中,由于预装了MySQL,因此无需额外安装。通过命令行登录MySQL时,可使用 `mysql -u root -p` 命令,并按提示输入密码。常见问题包括:1. 错误 1045 (28000):访问被拒绝,这通常是由于用户名或密码错误导致。为确保顺利连接,建议检查MySQL服务是否已启动,并确认用户名和密码的正确性。此外,还可以通过配置文件调整权限设置,以增强安全性。 ... [详细]
  • 本文深入探讨了数据库性能优化与管理策略,通过实例分析和理论研究,详细阐述了如何有效提升数据库系统的响应速度和处理能力。文章首先介绍了数据库性能优化的基本原则和常用技术,包括索引优化、查询优化和存储管理等。接着,结合实际应用场景,讨论了如何利用容器化技术(如Docker)来部署和管理数据库,以提高系统的可扩展性和稳定性。最后,文章还提供了具体的配置示例和最佳实践,帮助读者在实际工作中更好地应用这些策略。 ... [详细]
  • 从用户转型为开发者:一场思维升级的旅程 | 专访 StarRocks Committer 周威
    从用户转变为开发者,不仅是一次角色的转换,更是一场深刻的思维升级之旅。本次专访中,StarRocks Committer 周威分享了他如何在这一过程中逐步提升技术能力与思维方式,为开源社区贡献自己的力量。 ... [详细]
  • Java 零基础入门:SQL Server 学习笔记(第21篇)
    Java 零基础入门:SQL Server 学习笔记(第21篇) ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • MVVM架构~mvc,mvp,mvvm大话开篇
    返回目录百度百科的定义:MVP是从经典的模式MVC演变而来,它们的基本思想有相通的地方:ControllerPresenter负责逻辑的处理,Model提供数据,View负责显示。作为一种新的模 ... [详细]
  • 优化后的标题:利用YUM高效安装与管理MySQL数据库环境 ... [详细]
  • 浏览器中 W3School JavaScript 的 Location 对象详解
    Location对象是浏览器Window对象的一部分,通过`window.location`属性可访问。它包含了当前页面URL的相关信息,如协议、主机名、路径和查询参数等,对于页面导航和URL操作非常有用。 ... [详细]
author-avatar
沈达浪认_972
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有