Java开发者结合Node.js编程入门教程

首先, 我必须得承认,作为一个有着十多年开发经验的java开发者,我已经形成了解决绝大部分问题的固有套路,尽管它们很多时候显得笨重和繁琐。 比如说如果要读取一个文件,那应该就是初始化一个BufferedReader 实例并传入一个FileReader,这几乎是顺理成章的,我在很多自认为算得上“企业级”的项目中编写这样的代码并且很享受这个过程,可以说我就是一个对其他语言不屑一顾的java脑残粉。

  如果你正在阅读这篇博文,你可能已经陷入了我多年前早就陷入的一个误区,作为一名合格的开发人员应该不断地学习新的技术并且根据实际工作需求选用适 当的技术。尽管我一直在变老并且有朝一日可能会厌烦了java。但是我现在真的发现了一个激动人心的新东西,node.js对于我就像一个儿童得到一个新 奇的玩具,在这篇博文中,我将先向您展示如何使用Java EE创建一个简单的Rest服务来读取 MongoDB数据库。然后我会用node.js来实现相同的功能,你会更容易了解到这种新的开发语言的激动人心之处。

从基础开始——什么是Node.js?

  首先,我要说明一点,Node.js不是那种“新潮时尚”,只有“潮人”才使用的语言。虽然它是本着这种认知开始,但是我很高兴的报告给大 家,Node.js是一种成熟的语言——并且在当下这个互联网时代,它已经找到了其自己的方式进入大型企业,支撑起一些最高流量的网站。Node.js是 你技能储备当中的一个非常实用的工具,在构建稳定、安全和高性能的代码上,其便捷度会令你大吃一惊。

  言而总之,Node是一种针对服务器端活动的语言。它使用了Javascript语言,并且有非常多的库可用,比如npm模型。你可以把那些npm 模型比作Java中的.jar包。当你需要一部分功能,并且不喜欢自己全部编写这部分代码,极有可能在npm模型中已经提供了你正在寻找的特性。

  Node应用程序通常执行时需要实现效率最大化利用非阻塞 I/O 和异步事件。对于Java开发者来讲需要知道的一点是Node应用运行单线程中。然而,后端节点代码使用多个线程进行操作,如网络和文件访问。鉴于此,Node对于那些需要实时经验的应用是完美的选择。

继续——IDE支持

  你可能会像我一样,在IDE中“生存”和“呼吸”,这可能源于Java实在是太罗嗦了,需要我们在软件开发过程中编写恒定的代码来完成功能。一旦我们找到 了代码完成的好处,我们慢慢学会了使用 IDE 进行文件管理、 调试和其他非常有用的功能。可以这样说,我喜欢使用一款IDE并且在使用Nodeb工作时继续使用它。下面是当前最为第一批支持Node的IDE:

1.Eclipse——这应该很容易上手当你在Java中已经使用它。仅需要安装Node.js插件即可。
2.JetBrains IntelliJ IDEA——一款非常流行的商业化的IDE。目前为止,这是我最喜欢的IDE。
3.Microsoft Visual Studio——是的,你没看错。Node已经成长到微软在Visual Studio添加了对其的原生支持。这个实现非常稳定,并且VS是我第二喜欢的IDE。说来也怪,我使用VS仅仅用作一些基础的Node项目。
4.CodeEnvy——一款基于web的IDE
5.Cloud9——一款基于web的IDE
6.SublimeText 2——没有多余装饰的文本编辑器,由于其轻量级,在开发者中的知名度越来越高。

这是我工作在Node基础项目上的最喜欢的几款IDE。仅仅做个举例。

从一个范例开始

  在这篇博文的剩下部分里,我们将要用Java EE和Node.js结合起来创建一个简单的REST服务。这个REST服务将会简单的从MongoDB数据库里面读取信息并且返回这些结果给请求者。而 关于Java应用服务器和MongoDB数据库的安装和配置则不在本文的讨论范围之中。

创建我们的Java应用

  第一步:配置pom.xml文件

  我们把这个范例叫做restexample ,我将会使用JBoss EAP应用服务器。第一件我们要做的事情就是为使用Maven构建系统的依赖管理来配置我们的pom.xml文件。下面就是包含了我们这个restexample 应用里面所需要的依赖的pom.xml文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>restexample</groupId>
    <artifactId>restexample</artifactId>
    <packaging>war</packaging>
    <version>1.0</version>
    <name>restexample</name>
    <repositories>
      <repository>
        <id>eap</id>
        <url>http://maven.repository.redhat.com/techpreview/all</url>
        <releases>
          <enabled>true</enabled>
        </releases>
        <snapshots>
          <enabled>true</enabled>
        </snapshots>
      </repository>
    </repositories>
    <pluginRepositories>
      <pluginRepository>
        <id>eap</id>
        <url>http://maven.repository.redhat.com/techpreview/all</url>
        <releases>
          <enabled>true</enabled>
        </releases>
        <snapshots>
          <enabled>true</enabled>
        </snapshots>
      </pluginRepository>
    </pluginRepositories>
    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <maven.compiler.source>1.6</maven.compiler.source>
      <maven.compiler.target>1.6</maven.compiler.target>
    </properties>
    <dependencies>
      <dependency>
        <groupId>org.jboss.spec</groupId>
        <artifactId>jboss-javaee-6.0</artifactId>
        <version>3.0.2.Final-redhat-4</version>
        <type>pom</type>
        <scope>provided</scope>
      </dependency>
      <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>2.9.1</version>
      </dependency>
      </dependencies>
    </project>

 酷,相当的详细,但是我希望你们能够理解里面的代码,在这篇博文中我假设读者都已经了解Java,因此我不准备解释里面的细节了。

第二步:创建beans.xml文件并且设置我们的servlet映射

  作为范例的一部分,我们将会对我们的数据库访问类使用CDI(上下文依赖注入)。根据官方的CDI配置说明,一个应用要使用CDI的话就要在该应用的 WEB-INF 目录里面包含一个beans.xml文件。因此我们就来创建这个文件并且按照我们所需的信息来配置它。进入到你的 /src/main/webapp/WEB-INF 目录然后创建一个 beans.xml文件,加入下面的代码:

<?xml version="1.0"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://jboss.org/schema/cdi/beans_1_0.xsd"/>

  我们也需要在 web.xml 文件里面为我们的RESI API设置servlet映射。在 /src/main/webapp/WEB-INF 目录的文件里面加入下面的servlet映射元素:

<servlet-mapping>
  <servlet-name>javax.ws.rs.core.Application</servlet-name>
  <url-pattern>/ws/*</url-pattern>
</servlet-mapping>

第三步:创建DBConnection类

  到这一步,我们已经建立好项目并且我们的pom.xml文件已经包含了MongoDB数据库的驱动依赖,记得要确保所需要的驱动已经被打包好在我们的应用里面。下一件事我们就要创建一个类用来管理数据库的连接。创建一个新的文件命名为 DBConneection.java,把这个文件放置到 /src/main/java/com/strongloop/data 目录里面,然后再这个文件里面加入下面的代码:

  注意:要确保你安装MongoDB数据库配置好适当的连接授权细节信息!

package com.strongloop.data;

import java.net.UnknownHostException;

import javax.annotation.PostConstruct;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;

import com.mongodb.DB;
import com.mongodb.Mongo;

@Named
@ApplicationScoped
public class DBConnection {

  private DB mongoDB;

  public DBConnection() {
    super();
  }

  @PostConstruct
  public void afterCreate() {
    String mongoHost = "127.0.0.1"
    String mongoPort = "27001"
    String mongoUser = "strongloop;
    String mongoPassword = "rocks";
    String mongoDBName = "restexample";
    int port = Integer.decode(mongoPort);

    Mongo mongo = null;
    try {
      mongo = new Mongo(mongoHost, port);
    } catch (UnknownHostException e) {
      System.out.println("Couldn't connect to MongoDB: " + e.getMessage()
          + " :: " + e.getClass());
    }

    mongoDB = mongo.getDB(mongoDBName);

    if (mongoDB.authenticate(mongoUser, mongoPassword.toCharArray()) == false) {
      System.out.println("Failed to authenticate DB ");
    }

  }

  public DB getDB() {
    return mongoDB;
  }

}

第四步:把数据导入到MongoDB中(mmmm啤酒)

在我们的项目中,我们想要加载所有名称为Pabst的啤酒列表。如果你不熟悉啤酒行业,你可以试下Pabst Brewing公司生产的美式淡啤。这些啤酒上面带有蓝绶带和柯尔特{敏感词}图案,他们包含所有的麦芽糖饮料种类。

首先你需要下载一个json文件,里面包含需要返回的所有数据。你可以用下面的URL来实现这点:
https://dl.dropboxusercontent.com/u/72466829/beers.json

下载结束后,使用mongoimport命令把它导入到数据库中,命令如下:

$ mongoimport --jsonArray -d yourDBName -c beers --type json --file /tmp/beers.json -h yourMongoHost --port yourMongoPort -u yourMongoUsername -p yourMongoPassword

你可以看到如下结果:

connected to: 127.0.0.1:27017
Tue Jun 10 20:09:55.436 check 9 24
Tue Jun 10 20:09:55.437 imported 24 objects

第5步: 创建Beer模型对象

  我们已经创建了一个数据库连接类并且已经把啤酒信息载入到MongoDB数据库里了,是时候创建一个模型对象来控制我们的啤酒信息了。创建一个新文件,名为Beer.java并把它放到/src/main/java/com/strongloop/data目录下。创建好该文件后,在其中添加如下代码:

package com.strongloop.data;

public class Beer {
  private String id;
  private String name;
  private String description;

  public String getId() {
    return id;
  }
  public void setId(String id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getDescription() {
    return description;
  }
  public void setDescription(String description) {
    this.description = description;
  }
}

 注意: 提供好的JSON文件中包含了更多我们将会使用到的信息,所以可以找出来看看,并向其中添加一些额外的功能来拓宽你的学习经验。

第6步: 创建REST服务

  猜猜看该干什么了?不错,我们终于准备好要创建基于REST的web服务了,它使我们可以获取到上一个步骤当中载入进来的啤酒信息。为此,我们需要创建一个新的名为BeerWS.java的文件,并把它放到/src/main/java/com/strongloop/webservice目录下。创建好之后,添加下列代码:

package com.strongloop.webservice;

import java.util.ArrayList;
import java.util.List;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import com.strongloop.data.DBConnection;
import com.strongloop.data.Beer;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;

@RequestScoped
@Path("/beers")
public class BeerWS {

  @Inject
  private DBConnection dbConnection;

  private DBCollection getBeerCollection() {
    DB db = dbConnection.getDB();
    DBCollection beerCollection = db.getCollection("beers");
    return beerCollection;
  }

  private Beer populateBeerInformation(DBObject dataValue) {
    Beer theBeer = new Beer();
    theBeer.setName(dataValue.get("name"));
    theBeer.setDescription(dataValue.get("name"));
    theBeer.setId(dataValue.get("_id").toString());

    return theBeer;
  }

  // 获取所有啤酒
  @GET()
  @Produces("application/json")
  public List<Beer> getAllBeers() {
    ArrayList<Beer> allBeersList = new ArrayList<Beer>();

    DBCollection beers = this.getBeerCollection();
    DBCursor cursor = beers.find();
    try {
      while (cursor.hasNext()) {
        allBeersList.add(this.populateBeerInformation(cursor.next()));
      }
    } finally {
      cursor.close();
    }

    return allBeersList;
  }
}

第7步: 浏览着啤酒信息傻乐

  喔,搞定。我们已经写好了一个REST服务,可以从数据库中获取所有的啤酒信息。现在把你的代码部署到你的应用服务器吧, 在浏览器中打开下列地址看看它是否工作正常:
http://yourserverlocation/ws/beers

  如果所有东西都正常,你将会看到所有的啤酒信息列表,如下图所示:

创建 Node 应用

  如果你按照上面的步骤使用java进行编程,你会意识到使用javaEE创建应用尽管进展很快,但是创建一个类似REST服务的简单应用还是很麻烦。不要误解,我仍然很喜欢用javaEE,但是发现对于很多场景,比如创建返回json数据的REST服务,Node更适用。接下来,我们将要使用StrongLoop的LoopBack API创建一个简单的web服务。另外,我会向你展示如何在苹果OSX系统上安装Node。

步骤1:安装 Node

  最简单的安装Node的方式是通过一个兼容大部分操作系统的二进制包。打开浏览器访问下面的网页,根据你的操作系统下载适用的版本:
http://nodejs.org/download/

  下载完成后,你会看到下面的内容:

如果你用的是Mac OSX,点击通用的.pkg文件。这会把安装程序保存到你本机中。下载了该文件之后,双击它就可以启动安装程序,你会看到下列安装对话框:

一路默认的安装下去,成功安装之后,点击close按钮来退出安装程序。

相当简单,是吧?

步骤2:使用NPM安装LoopBack

  现在本地系统中已经安装了Node,接下来要安装StroopLoop公司提供的LoopBack包。LoopBack是一个开放的API源码包,当你学习使用Node开发、部署软件时,LoopBack可以使编程更简单。

  为了安装LoopBack,我们要使用npm命令行,它是Node语言核心的一部分。NPM是一个官方的包管理工具,用于安装应用程序依赖的类库或模版。如果你是一名java程序员,你可以把NPM比作Maven。使用Maven构建项目,开发人员可以在pom.xml中配置项目依赖的jar包或模版。当项目开始编译时,Maven会下载所有依赖的文件,并将jar包引入到项目中。NPM工作原理和Maven相同,对于一些特殊的项目,它使用package.json文件来配置项目依赖的文件。你也可以使用命令行方式将依赖的文件下载到本地系统中。如果这些内容你不理解,不要担心,在接下来的步骤里我们会详细描述package.json文件。

  为了安装LoopBack, 我们使用一个简单的命令行来下载和安装所有依赖的文件。打开你的window命令行窗口,输入下面命令:

$ npm install -g strongloop

提示:安装时,你可能需要使用其它用户帐号来执行这个命令。

  这个命令行是什么含义呢?-g参数表示告诉npm我们想要安装strong-cli包。-g参数使这个包对任何系统和应用程序都兼容。一旦你运行了上面的命令,NPM会下载所有依赖的文件。下载的时间视网速而定,可能需要几分钟。

步骤3:创建应用程序

  使用LoopBack API创建一个应用程序很简单。 打开你的window命令行窗口,使用下面的命令来创建一个新的应用程序restexample.

$ slc loopback

接下来它会提示输入项目根路径的名称。 在这个示例中,使用restexample。 接下来它会提示输入应用程序名称。 使用默认值restexample。

slc命令现在已经创建一个名称为restexample的LoopBack应用程序,并且已经配置了这个应用程序。 如果再次执行上面的命令,仍然使用restexample命名,LoopBack会创建一个新的目录。 可以使用cd命令来修改应用程序的根路径。

$ cd restexample

现在我们已经创建完一个应用程序,接下来我们将MongoDB配置为程序的数据源。

步骤4:定义数据源

为了连通MongoDB,我们需要给应用程序增加一个数据源,运行以下命令即可:

$ slc loopback:datasource

在弹出的提示符下,可以输入任意自定义的数据源名称,这里选择myMongo

[?] Enter the data-source name: myMongo

这样我们就将后端的数据源定义附加到由StrongLoop支持的真实连接器上面.这里我们从列表选择MongoDB连接器.

[?] Select the connector for myMongo:
PostgreSQL (supported by StrongLoop)
Oracle (supported by StrongLoop)
Microsoft SQL (supported by StrongLoop)
MongoDB (supported by StrongLoop)
SOAP webservices (supported by StrongLoop)
REST services (supported by StrongLoop)
Neo4j (provided by community)
(Move up and down to reveal more choices)

步骤5:指向真实的数据源

  为了连通MongoDB,我们需要指向真实际的MongoDB实例.LoopBack在datasource.json文件中定义了所有的数据源配置信息.这个文件位于应用程序的root/server目录.打开这个文件,按照如下的方式,为MongoDB增加一个数据源:

{

 "db": {
  "name": "db",
  "connector": "memory"
 },
 "myMongo": {
  "name": "myMongo",
  "connector": "mongodb"
  "url": "mongodb://localhost:27017/restexample"
 }
}

注意:要保证为MongoDB数据库提供正确的 连接 URL.针对这个例子,我创建了一个名为 restexample 的数据库,它用来作为数据源.

步骤6:导入数据到MongoDB(mmmmm 啤酒)

  就像本文Java部分说到的那样,我们需要加载数据集到MongoDB数据库中.如果你已经按照本文说到的方法完成了这个步骤,然后打算使用同一个数据库,你可以忽略步骤6,直接跳到步骤7.

  首先,你需要下载一个包含所有要返回信息的JSON文件,可以从如下的URL获取:
https://dl.dropboxusercontent.com/u/72466829/beers.json

  数据集文件下载完毕后,直接使用如下的mongoimport命令将它加载到数据库:

$ mongoimport --jsonArray -d yourDBName -c beers --type json --file /tmp/beers.json -h yourMongoHost --port

  你应该可以看到如下的结果:

connected to: 127.6.189.2:27017
Tue Jun 10 20:09:55.436 check 9 24
Tue Jun 10 20:09:55.437 imported 24 objects

步骤7:创造我们自己的啤酒模型

  在Java世界里,由此可以想到对象模型.它代表这一个对象,只是在这里,这个对象是啤酒.LoopBack通过命令行,提供了一种创建模型对象的简便方式.打开终端窗口,进入到工程文件夹,输入如下命令:

$ slc loopback:model

这将会开启一个交互式的会话来定义模型.首先需要输入的是模型名称,这里输入"beer".接下来会提示,这个模型应该附加到的数据源,这里选择之前创建的myMongo数据源.

[?] Enter the model name: beer
[?] Select the data-source to attach beer to:
db (memory)
myMongo (mongodb)

接下来提示,是否通过REST将此API暴露出来.当然,这里希望这样.

[?] Expose beer via the REST API? Yes

最后,为模型选择网络复数名,这里模型名为beer,所以复数为beers(默认).敲击Enter键接受默认值.

[?] Custom plural form (used to build REST URL):

接下来会提示定义模型属性.对这个示例程序,我们关注名称和对啤酒的描述.

Enter an empty property name when done.
[?] Property name: name

只要敲击了Enter,就会提示输入各个指定属性的数据类型.第一个项是name,这里选择字符串类型.选择字符串类型,然后敲击

Enter.
[?] Property type: (Use arrow keys)
string
number
boolean
object
array
date
buffer
geopoint
(other)

接下来,按照同样的方式创建description属性,接着会要求输入数据类型.它同样是一个字符串类型,选择字符串选项,然后敲击

Enter.
Let's add another beer property.
Enter an empty property name when done.
[?] Property name: description
invoke loopback:property
[?] Property type: string
[?] Required? Yes

  祝贺!你已经使用LoopBack结合Node完成了模型对象的创建.如果想查看在这个过程中真正创建了什么,可以打开位于应用程序root/common/models目录的beer.json文件,滚动到这个文件的最后,将会看到如下模型:

{
 "name": "beer",
 "base": "PersistedModel",
 "properties": {
  "name": {
   "type": "string",
   "required": true
  },
  "description": {
   "type": "string",
   "required": true
  }
 },
 "validations": [],
 "relations": {},
 "acls": [],
 "methods": []
}

这里可以看到,我们创建了一个模型,同时,name和description属性已经赋予了这个模型.

在/server/model-config.js文件中,可以注意到,文件中包含一些额外的字段,包括public和datasource.其中public域指定我们希望通过一个REST网络服务将此模型暴露给外部.datasource域则指定这个模型的CRUD操作将会用到的数据源.

"beer": {
  "dataSource": "myMongo",
  "public": true
 }

步骤8:沉浸在看到beers的喜悦中

  祝贺!你已经创建了第一个Node.js应用程序,其中包含可以获取beer信息的REST网络服务.最后,我们需要做的就是部署这个应用程序.

  庆幸的是,部署是已经很容易的事情.可以通过在应用程序根目录执行如下命令来完成:

$ slc run

只要应用程序一运行,就可以通过浏览器转到如下的URL来确认部署是否成功:

http://0.0.0.0:3000/api/beers

相当酷,是不是?

LoopBack同时也包含了一个允许查看应用程序所有可用服务的页面,包括Beer模型和我们创建的REST服务,将浏览器指向如下的URL即可查看:

http://0.0.0.0:3000/explorer

页面加载成功后,你会看到下面的界面,我们已经创建了beers节点作为博客的一部分,我把/beers端点进行高亮显示了:

你可以点击/beers来展开可供调用的API,你可以操作并测试一下,如下图所示:

结论

 在这篇博文中,我展示了如何使用java EE 去创建一个rest服务,这个服务能够返回Pabst啤酒公司的啤酒产品清单数据。 之后我又使用node.js以及基于node.js的loopback框架使用很少的代码实现了相同功能的rest服务。 最重要的是,LoopBack API  还对beer实体的增删查改提供了默认的实现,使得我们不用再写一行代码就得到了一个具有完整增删查改功能的rest服务。

下面的清单对博文中涉及的javaEE和node.js各自特性进行一个对比:


Feature


Java EE


Node.js


完善的IDE支持


Yes, 多种IDE供选择,包括 Eclipse, Sublime and Idea


Yes,  多种IDE供选择, Visual Studio, Eclipse, Sublime


依赖管理


Maven


NPM


有企业级项目采用


Yes


Yes


庞大的组件生态系统


Yes


Yes


需要 JVM


Yes


No


通用开发框架


Spring, JEE


Express


数据库支持


Yes


Yes


ORM 框架


Yes


Yes


测试框架


Yes


Yes

接下来的内容?

即将发布的Node v0.12 将带来至少8个激动人心的新特性,它们会是什么呢?访问 “What's New in Node.js v0.12” 页面了解更多.
对Node相关的培训和认证感兴趣? StrongLoop 公司提供各种服务满足您的需求。

(0)

相关推荐

  • 零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门

    本文改自非鱼的<[翻译]前端开发人员入门指南,从零开始搭建Node.js, Express, Jade, Mongodb服务器>,之所以把Jade换成Ejs,是因为我觉得ejs更符合WEB编程人员的习惯,更确切说应该是更符合PHP.ASP程序员的使用习惯.好了,废话不多说,直接开始教程. 第1部分 – 15分钟安装 如果你真的是从零开始学,那就花点时间先把环境搭建起来吧.这不难,我用的是Win8,所以这看上去跟那些用Mac和Ubuntu或者其它*nix系统的教程有点区别,不过大致是一样的. 第

  • Node.js入门教程:在windows和Linux上安装配置Node.js图文教程

    本章节我们将向大家介绍在window和Linux上安装Node.js的方法. 本安装教程以Node.js v0.10.26 版本为例. Node.js安装包及源码下载地址为:http://www.nodejs.org/download/. 根据不同平台系统选择你需要的Node.js安装包. 注意:Linux上安装Node.js需要安装Python 2.6 或 2.7 ,不建议安装Python 3.0以上版本. Windowv 上安装Node.js Windows 安装包(.msi) : 32 位

  • node.js入门教程

    Node是个啥? 写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性的拿了些下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段. 1.Node 是一个服务器端 JavaScript 解释器,可是真的以为JavaScript不错的同学学习Node就能轻松拿下,那么你就错了,总结:水深不深我还不知道,不过确实不浅. 2.Node 的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个物理机的连接代码.处理高并发和异步I/O是Node

  • Node.js的Web模板引擎ejs的入门使用教程

    Node 开源模板的选择很多,但推荐像我这样的老人去用 EJS,有 Classic ASP/PHP/JSP 的经验用起 EJS 来的确可以很自然,也就是说,你能够在 <%...%> 块中安排 JavaScript 代码,利用最传统的方式 <%=输出变量%>(另外 <%-输出变量是不会对 & 等符号进行转义的).安装 EJS 命令如下: npm install ejs JS 调用 JS 调用的方法主要有两个: ejs.compile(str, options); //

  • Node.js包管理器Yarn的入门介绍与安装

    前言 这两天大家有没有都被Yarn悄悄刷了屏,最近Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm .为了跟上 Javascript 这股潮 流的脚步,大概的浅尝了一下这个自称是又快又可信赖又安全的包管理,所以写的内容不会很详细,更多的可能只是针对这个全新的包管理与 npm 的不同之处来对比.也可能有些地方写得不对,如果有的话,欢迎指正. 一.安装 首先当然是安装啦.跟 npm 这种被钦点而随 nodejs 一起被安装的包管理器不同, Yarn 需要自行手动安装

  • Node.js+Express配置入门教程详解

    Node.js是一个Javascript运行环境(runtime).实际上它是对Google V8引擎进行了封装.V8引 擎执行Javascript的速度非常快,性能非常好.Node.js对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更好.Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快.易于扩展的网络应用.Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行的数据密集型

  • Node.js简单入门前传

    1.什么是NodeJS 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎(Google的Chrome浏览器使用的JavaScript执行环境), V8引擎执行Javascript的速度非常快,性能非常好. 2.为什么选择NodeJS 如果你是一个前端程序员,你不懂得像PHP.Python或Ruby等

  • Java开发者结合Node.js编程入门教程

    首先, 我必须得承认,作为一个有着十多年开发经验的java开发者,我已经形成了解决绝大部分问题的固有套路,尽管它们很多时候显得笨重和繁琐. 比如说如果要读取一个文件,那应该就是初始化一个BufferedReader 实例并传入一个FileReader,这几乎是顺理成章的,我在很多自认为算得上"企业级"的项目中编写这样的代码并且很享受这个过程,可以说我就是一个对其他语言不屑一顾的java脑残粉. 如果你正在阅读这篇博文,你可能已经陷入了我多年前早就陷入的一个误区,作为一名合格的开发人员应

  • Node.js基础入门之使用方式及模块化详解

    目录 什么是Node.js ? Node.js下载 Node.js和JavaScript的区别 Node.js安装与验证 Node.js使用方式 1. REPL模式 2. 文件模式 Node.js模块化 1. 什么是模块? 2. 模块分类 3. 创建自定义模块 4. 调用自定义模块 5. 模块测试 6. 主模块 7. 模块组成 在这个竞争日益激烈的今天,已经不是一门语言,一项技术走天下的时代了.正所谓艺多不压身,今天开始学习Node.js,学而时习之,不亦乐乎,希望可以借鉴经验,学以致用,如有不

  • Node.js基础入门之path模块,url模块,http模块使用详解

    目录 path模块 1. path模块示例 2. path模块其他方法 url模块 1. 旧的解析方法 2. 新的解析方法 http模块 1. 什么是HTTP协议? 2. HTTP协议约束的细节 3. HTTP请求响应过程 4. http模块get方法 经过前面四天的学习,对Node.js已经有了一个基础的认识,今天继续学习Node.js网络通信编程相关内容,并稍加整理加以分享,如有不足之处,还请指正. path模块 Node.js中,提供了一个path模块,在这个模块中,提供了许多实用的,可被

  • Three.js快速入门教程

    引言 本文主要是讲解Three.js的相关概念,帮助读者对Three.js以及相关知识形成比较完整的理解. 近年来web得到了快速的发展.随着HTML5的普及,网页的表现能力越来越强大.网页上已经可以做出很多复杂的动画,精美的效果. 但是,人总是贪的.那么,在此之上还能做什么呢?其中一种就是通过WebGL在网页中绘制高性能的3D图形. OpenGL,WebGL到Three.js OpenGL大概许多人都有所耳闻,它是最常用的跨平台图形库. WebGL是基于OpenGL设计的面向web的图形标准,

  • Vue.js快速入门教程

    像AngularJS这种前端框架可以让我们非常方便地开发出强大的单页应用,然而有时候Angular这种大型框架对于我们的项目来说过于庞大,很多功能不一定会用到.这时候我们就需要评估一下使用它的必要性了.如果我们仅仅需要在一个简单的网页里添加屈指可数的几个功能,那么用Angular就太麻烦了,必要的安装.配置.编写路由和设计控制器等等工作显得过于繁琐. 这时候我们需要一个更加轻量级的解决方案.Vue.js就是一个不错的选择.Vue.js是一个专注于视图模型(ViewModal)的框架.视图模型是U

  • 基于Node.js模板引擎教程-jade速学与实战1

    环境准备: 全局安装jade: npm install jade -g 初始化项目package.json: npm init --yes 安装完成之后,可以使用 jade --help 查看jade的命令行用法 一.在项目目录下新建index.jade文件 inde.jade代码: doctype html html head meta(charset='utf-8') title body h3 欢迎学习jade 1,标签按照html的缩进格式写 2,标签的属性可以采用圆括号 3,如果标签有

  • Linux Shell 脚本编程入门教程

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作.在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用.深入地了解和熟练地掌握Shell编程,是每一个Linux用户的必修 功课之一. Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh).Bourne

  • sublime text配置node.js调试(图文教程)

    1. 首先到 nodejs.org 下载 Node.js 安装包并安装. 2. 打开 Sublime Text 2 编辑器.选择菜单 Tools --> Build System --> new Build System... 3. 将文件保存为 JavaScript.sublime-build 4. 文件内容为: { "cmd": ["node", "$file"], "file_regex": "^[

  • node.js命令行教程图文详解

    本文先介绍原生的node.js实现命令行交互,了解原生的api,然后通过commander.js和inquirer.js实现一个完整的交互命令行工具. 项目地址 process (进程) process对象是一个全局变量,它提供了当前node.js进程的信息并对其控制.因为其是一个全局变量所以无需在文件中引入. 需要用到的几个api process.argv process.cwd() process.stdin process.stdout process.stdin.resume() pro

  • Java搭建简单Netty开发环境入门教程

    下面就是准备Netty的jar包了,如果你会maven的话自然是使用maven最为方便了.只需要在pom文件中导入以下几行 <!-- https://mvnrepository.com/artifact/io.netty/netty-all --> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1

随机推荐