目录
简介
Node.js是一个Javascript运行环境(runtime)
有大佬开发了一个Google v8 引擎在服务端运行的 javascript, 它就叫做 node.js
(node.js 对于javascript 就像tomcat对于Java)
安装配置
下载安装node.js 配置环境变量
控制台中查看版本
node --version
npm
NPM是随同NodeJS一起安装的包管理工具,用来下载别人的模块,发布自己的模块
npm -v
所有npm都是发布在 https://www.npmjs.com/ 上面, 注册激活账户
1. 编写模块
2. 创建package.json 文件,告诉 npmjs.com 这个模块的相关信息 scripts
字段,可以用于指定脚本命令,供npm
直接调用
3. 登录,发布
npm adduser
npm publish
"scripts": {
"test": "mocha test/"
}
npm run test
第一个Node.js应用
Node.js应用是由哪几部分组成的:
- 引入required模块:我们可以使用require指令来载入Node.js模块。
- 创建服务器:服务器可以监听客户端的请求,类似于Apache 、Nginx等HTTP服务器。
- 接收请求与响应请求:服务器很容易创建,客户端可以使用浏览器或终端发送HTTP请求,服务器接收请求后返回响应数据。
创建项目, 在src下新建文件 server.js, 然后用javascript开发程序
1.require引入模块
var http = require('http'); //引入http模块
var url = require('url'); //引入url模块
var querystring = require('querystring');// 引入querystring 库
3.service函数用来处理请求和响应 , 类似servlet里的doGet, doPost方法
function service(request, response){
//请求的方式
console.log("method - " + request.method);
//请求的url
console.log("url - " + request.url);
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello Node.js');
}
2.基于service函数来创建服务
var server = http.createServer(service);
//服务监听8088端口
server.listen(8088);
控制台中运行程序
node server.js
访问http://127.0.0.1:8088/ 就会触发程序
回调:
异步编程依托于回调来实现, Node 所有 API 都支持回调函数
我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回。这样在执行代码时就没有阻塞或等待文件 I/O 操作。这就大大提高了 Node.js 的性能,可以处理大量的并发请求
回调function(接收错误对象 , 接收回调函数)
阻塞与非阻塞案例:
//阻塞读取文件
var fs = require("fs");
var data = fs.readFileSync('input.txt');
console.log(data.toString());
console.log("读取文件结束");
//非阻塞读取文件
var fs = require("fs");
fs.readFile('input.txt', function (err, data) {
if (err) return console.error(err);
console.log(data.toString());
console.log("读取文件结束");
});
console.log("正在读文件中,先干其他事");
事件循环
引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件
模块:
一个 Node.js 文件就是一个模块, 这个文件可能是JavaScript 代码、JSON或者编译过的C/C++ 扩展。
就像java的jar包, 可以调用的,能够实现某些功能的代码文件
Stream(流模块)
Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出)。
该抽象接口是可读、可写或是既可读又可写的,通过这些接口,我们可以和磁盘文件、套接字、HTTP请求来交互,实现数据从一个地方流动到另一个地方的功能。
路由:
就是根据不同的请求调用不同的服务模块, URL到函数的映射 相当于springboot开发各个controller对应的方法
例如:/users - - > 调用 getAllUsers()函数
/users/count/ - - > 调用 getUsersCount()函数
就是把路径与函数进行一一对应,通过路径信息调用特定的函数
路由功能实现:
- 入口模块 index.js
- 服务器模块 server.js
- 路由模块 router.js
- 业务处理模块 xxx.js......
浏览器访问入口模块index,
index调用服务器模块 server, server获取请求值并传给路由模块router,
router路由模块根据请求值调用对应的业务处理模块
Express 框架
express 是一个 node.js Web应用框架,使用 Express 可以快速地搭建一个完整功能的网站。
安装 express 框架
npm install express --save
在 node_moduels目录下就会创建一堆模块,这些都是 express 间接要依赖的模块