Yuque Archive
寻常的路

Node.js起步

Node为JavaScript提供了强大的后端服务处理能力。

Node提供了4个内置模块net、dgram、http、https,分别用于处理TCP、UDP、HTTP、HTTPS请求。

创建HTTP服务器

只需要一些简单的代码,就能够创建一个可以响应HTTP请求的服务程序:

浏览器访问 http://localhost:3000 ,页面显示出“Hello World!”。http是Node内置的模块。

createServer()方法使用了回调,即将函数作为参数。在JavaScript中回调并不难理解,比如这样来定义一个函数:

程序会将hello打印到控制台。

使用Express

Express是Node的一个Web框架,类似Django于Python。

执行下面语句全局安装Express生成器:

然后使用Express生成一个应用模板:

Express默认使用Jade模板引擎,如果想要最新的Pug,需要在express后面跟上参数--view=pug

进入myapp目录,执行npm i安装依赖。

所有依赖模块安装之后,就可以执行npm start启动应用了,访问 http://localhost:3000 ,可看到Express的默认输出。

Express提供了很多强大的功能,比如routing可接收来自不同路径的GETPOST请求,并作出相应响应,或者丰富的response处理。

打开./routes/user.js文件,在模块导出前加入这条路由规则:

访问 http://localhost:3000/users/api ,页面返回了json字符串。

Express提供的这种便利,允许很轻松的构建REST API,这正契合微服务的理念。

使用mongoose

mongoose是一个优雅的mongodb对象建模工具,经常与Express结合使用。

mongoose中有三个概念,Schemas、Models和Documents。Schemas为架构、概要,用来定义字段名称以及数据类型;Models即模型,对应数据库中的集合,根据Schemas创建;Documents是模型的实例,即文档,根据Models创建。

执行命令安装mongoose:

使用mongoose连接数据库:

mongoose对象的connection属性可用于监听数据库的连接状态:

接着使用mongoose执行一些基本的操作:

要注意在mongoose中,Models和Documents都拥有操作数据库的API,分别执行对数据库的不同操作。

Express中可根据需要使用mongoose,比如路由文件中根据REST API实现数据的持久化。

使用Socket.IO

Socket.IO经常与Web框架一起使用,因为需要客户端和服务端交互。

执行命令安装Socket.IO模块:

下面简单实现一下Socket.IO的使用,这里依赖了Express模块,用到了Express提供的res.sendFile()方法。当然也可以不用Express,而使用内置的fs模块读取文件,并把文件内容作为相应,像这样:

与之相比,Express要稍微简洁一点。这段是服务端的代码,渲染返回了index.html文件,并且监听Socket.IO的connection事件,即当服务端接收到连接请求,就执行其回调函数:

这是客户端index.html的代码:

使用node命令执行服务端文件,每当访问 http://localhost:3000 ,控制台都会打印出”a user connected“的消息。

对上面的代码稍作更改,让客户端可以向服务端发送自定义请求。在服务端文件监听connection事件的回调函数中,添加对客户端事件的监听,整段代码像是这样:

客户端代码需要做相应修改,让其能够向服务端发送请求:

重新执行服务端文件,每次点击页面按钮,控制台都会做出响应,打印出请求数据。