首页 > 编程语言 >Node.js入门 - 永恒的Hello World!

Node.js入门 - 永恒的Hello World!

时间:2023-07-24 17:32:19浏览次数:41  
标签:Node http Hello World js response


文章原作者为Lee Jacobson, 已经作者授权翻译用于非商业用途。

介绍

 

这是我的关于Node.js系列入门教程的第一篇。必须说明一下,我并不是Node.js的专家,但是尝试向别人解释这是怎么回事是自我学习的一个好方法。如果你发现有些地方并不是那么正确,请提出来让我知道以便修正,谢之。

 

最近Node.js如此流行,到处是讨论这个的话题,我决定一探究竟学学这玩意儿。软件行业技术更新如此之快,如果落在后面是很危险滴(汗,这哥们 才20岁出头,就有这么强的落后于时代的危机感)。如果你不想落后于时代,不想失业,学习新的编程语言更新自己的技能是作为程序员非常重要的一件事情。如 果你不能认真对待此事,想想那些菜鸟新程序员不能找到工作的悲惨境地吧。

 

好了,闲话少说,进入正题(铛铛铛铛)。

 

Node.js是一个服务器端JavaScript实现。这意味着所有Javascript的牛B特性都能在Node.js里得到支 持,同样意味着如果你以前有JavaScript编程经验的话,你学习Node.js将占有极大的优势。Node.js刚出现没几年,哪怕是一直用这个东 西工作的,也只是几年,对比C这些古老语言有这么多人在用,这玩意没多少人会,如果你会的话,比单纯php程序员的竞争力要提高不少吧?(作者观点,用 php的同学不要在评论里骂我。。。)

开始Hello World吧

让我们来开始写第一个Hello Wrold程序,首先到http://www.nodejs.org 去下载并安装node.js。安装好之后,用你喜欢的文本编辑器创建一个JavaScript文件,内容如下:



console.log("Hello World");



 

保存为"hello.js" ,并且在终端里用如下命令运行程序:



node hello.js



 

现在你应该在终端里看到金光闪闪的“Hello World”两个大字了。如果只想看到这两个字,那么到这里就完了,不过我相信你更想看到在浏览器里怎么看到这两个字,好吧,打开你刚才创建的hello.js这个文件,重新编辑如下:



var http = require('http');

    http.createServer(function (request, response) {
        response.writeHead(200, {'Content-Type': 'text/plain'});
        response.end('Hello World\n');
    }).listen(8080);

    console.log('Server started');


 

保存文件然后执行:



node hello.js


 

终端里应该看到“Server started”,用浏览器打开http://localhost:8080,我操,金光闪闪的“Hello World”出现在浏览器里了。

 

让我们来回顾一下我们刚才写的代码。

 

第一行是获取一个http组件并赋值给变量"http",http是Node.js的内置组件, 方便我们创建Node.js应用的东东。

 

我们可以通过调用Node.js的http组件的"createServer"方法来创建一个http服务, 这个方法返回一个对象,并且需要一个函数作为参数。

 

调用返回对象的方法listen来侦听端口,参数值就是你需要侦听的端口数值,这也是刚才为什么我们要用http://localhost:8080去请求的原因,代码里指定了这个端口。

 

我们还创建了一个函数作为参数传入createServer,在JavaScript编程中这是一个常用的做法,函数可以像变量或者对象一样作为参 数传入别的方法。当我们创建的http服务每次接收到从8080端口过来的请求时,执行传入的函数,而我们传入的函数称之为匿名函数,因为我们没有给它命 名。

 

你可能注意到作为参数的匿名函数有两个参数,"request"和"response",这两个参数由http服务在接收到请求时传入,它们都是对象,request用于获取请求内容,response用于我们返回相关信息。

 

在这个匿名函数中,第一件事是调用response的writeHead函数设置将要返回的http状态(200成功,403无权限,500异常,等等),同时设置Content-Type头,告诉浏览器我们返回的是纯文本。

 

接下来我们利用response对象输出金光闪闪的Hello World了,这里我们只是简单地调用response的write方法然后结束,所以用response的end来结束本次响应。

让我们的响应更有趣一点

就算我不断加上"金光闪闪"的定语,也无法掩饰Hello World是一个无聊的程序(好吧,所有程序员都是通过写一个无聊的程序开始的...), 让我们来写一个稍微不那么无聊的程序:用户计数器。用Node.js创建一个用户计数器巨简单,甚至不像php一样可能需要数据库。(原文如此,事实上别 的技术也可以不需要数据库之类的,利用全局会话等来实现,作者的意思可能是直接可以使用变量计数,但下文的变量在请求之外,相当于一个全局变量)。

 

创建一个叫counter.js的文件,并写入:



var http = require('http');

    var userCount = 0;
    http.createServer(function (request, response) {
        console.log('New connection');
        userCount++;

        response.writeHead(200, {'Content-Type': 'text/plain'});
        response.write('Hello!\n');
        response.write('We have had '+userCount+' visits!\n');
        response.end();
    }).listen(8080);

    console.log('Server started');



 

然后运行之:



node counter.js



 

这时候访问http://localhost:8080,你就可以看到访问次数,刷新这个数字会增长。

 

注:你可能会看到一个奇怪的现象,每刷新一次,数值增加是2而不是1,这是因为你的浏览器同时请求了http://localhost:8080/favicon.ico。

 

你可以在终端的输出看到每次请求的情况。

 

这个程序的主要功能就是先定义一个userCount的变量,然后每次接收到请求时+1,并输出到浏览器。

 

在PHP里你要实现相同功能的话,需要保存信息到类似文本或者数据库的东西里面去。(又黑PHP...)

 

http://www.laonan.net/blog/63/

 

补充:

Hello World
好了,让我们开始实现第一个 Node.js 程序吧。打开你常用的文本编辑器,在其中输入:



console.log('Hello World');

 


将文件保存为 helloworld.js,打开终端,进入 helloworld.js 所在的目录,执行以下命令:


node helloworld.js



如果一切正常,你将会在终端中看到输出 Hello World 。很简单吧?下面让我们来解释一下这个程序的细节。 console 是 Node.js 提供的控制台对象,其中包含了向标准输出写入的操作,如 console.log 、 console.error 等。 console.log 是我们最常用的输出指令,它和 C 语言中的 printf 的功能类似,也可以接受任意多个参数,支持 %d 、 %s 变量引用,例如:


//consolelog.js
console.log('%s: %d', 'Hello', 25);


 

输出的是 Hello: 25。

小技巧——使用 supervisor
如果你有 PHP 开发经验,会习惯在修改 PHP 脚本后直接刷新浏览器以观察结果,而你在开发 Node.js 实现的 HTTP 应用时会发现,无论你修改了代码的哪一部份,都必须终止Node.js 再重新运行才会奏效。这是因为 Node.js 只有在第一次引用到某部份时才会去解析脚本文件,以后都会直接访问内存,避免重复载入,而 PHP 则总是重新读取并解析脚本(如果没有专门的优化配置)。Node.js的这种设计虽然有利于提高性能,却不利于开发调试,因为我们在开发过程中总是希望修改后立即看到效果,而不是每次都要终止进程并重启。

supervisor 可以帮助你实现这个功能,它会监视你对代码的改动,并自动重启 Node.js。使用方法很简单,首先使用 npm 安装 supervisor:



npm install -g supervisor



如果你使用的是 Linux 或 Mac,直接键入上面的命令很可能会有权限错误。原因是 npm


需要把 supervisor 安装到系统目录,需要管理员授权,可以使用 


sudo npm install -g supervisor


supervisor app.js



 

标签:Node,http,Hello,World,js,response
From: https://blog.51cto.com/u_8895844/6837119

相关文章

  • 把Pod分配到node上
    分配Pod到node给node打上标签kubectllabelnodes<your-node-name>disktype=ssd查看标签kubectlgetnodes--show-labels根据标签分配nodeapiVersion:v1kind:Podmetadata:name:nginxlabels:env:testspec:containers:-name:nginximage:n......
  • 使用js实现思维导图
    本文主要阐述使用js实现思维导图的关键技术点,如果还不知道什么是思维导图的同学,请自行度娘。以下是demo和源码的传送门:demo:http://sources.ikeepstudying.com/mindmaptree-master/源码:http://github.com/RockyRen/mindmaptree/tree/master下载:mindmaptree-master 在源码中我使用......
  • PHP数组缓存:三种方式JSON、序列化和var_export的比较
    使用PHP的站点系统,在面对大数据量的时候不得不引入缓存机制。有一种简单有效的办法是将PHP的对象缓存到文件里。下面我来对这3种缓存方法进行说明和比较。第一种方法:JSONJSON缓存变量的方式主要是使用json_encode和json_decode两个php函数。json_encode可以将变量变成文本格式,这......
  • Converting between XML and JSON
    1ConvertionbetweenXMLandJSONhttp://www.json.org/java/index.html  API:http://www.json.org/javadoc/org/json/XML.htmlpublicclassXMLextendsjava.lang.Object ThisprovidesstaticmethodstoconvertanXMLtextintoaJSONObject,andt......
  • 【Azure Event Hub】Event Hub的Process Data页面无法通过JSON格式预览数据
    问题描述在EventHub的门户页面中,可以通过ProcessData页面查看EventHub中的数据,但是当使用JSON格式预览时(ViewinJSON),却出现错误。消息一: Nodatawasfoundforpreviewfrom'test01'.Makesuretheinputhasrecentlyreceiveddataandthecorrectformatofthosee......
  • jstl tags
    前言=========================================================================JSTL标签库,是日常开发经常使用的,也是众多标签中性能最好的。把常用的内容,放在这里备份一份,随用随查。尽量做到不用查,就可以随手就可以写出来。这算是Java程序员的基本功吧,一定要扎实。 JSTL全名为J......
  • 常见的js内存泄漏
    1、 意外的全局变量。未被声明的变量,会被挂在window对象下,不能及时的销毁。2、计时器和回调函数timers。定时器setInterval或者setTimeout在不需要使用的时候,没有被clear,导致定时器的回调函数及其内部依赖的变量都不能被回收,这就会造成内存泄漏。3、DOM泄漏。(1)给DOM对象添加的属......
  • 【js学习笔记五十二】weakmap的应用
     目录前言导语 代码部分前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语WeakuMap编辑 代码......
  • 【js学习笔记五十一】weakmap
     目录前言导语 代码部分前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语WeakMap编辑 代码部......
  • Ruby实践—HelloWorld
    开发环境OS:WindowsXPRuby:Ruby1.9.1Rails:Rails2.3.5IDE:RubyMine2.0.1 1、创建Rails工程 2、修改/config/database.yml自动创建的工程中默认数据库连接的是sqlite,如果没有安装此数据库,需要修改该配置(本例中使用的是mysql)#MysqlVersion5.1.46development:adapter:mys......