目录
- 什么是Node
- Node模块化
- 安装
- 创建Node.js应用
- 搭建项目
- express
什么是Node
-
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
-
我们使用JS写的Node代码;
-
事件驱动:当触发某个事件的时候,执行事件中指定的代码!
-
非阻塞式 I/O 的模型:采用非阻塞的操作,能够提高处理的效率!
-
Node.js 的包管理器 npm,是全球最大的开源库生态系统。
-
先使用
npm init -y
初始化一下包管理文件package.json
,将来所有安装的包,都会记录到这个文件中 -
使用
npm install 包名 --save/--save-dev
去安装包;其中,install
可以简写成i
; -
--save
表示把包安装到部署依赖中(在开发和部署上线都需要使用的包);--save-dev
表示安装到开发依赖(只在项目开发阶段需要用到的包); -
--save
可以简写成-S
;--save-dev
可以简写成-D
; -
npm uninstall 包名 --save/--save-dev
或者npm remove 包名 --save/--save-dev
-
npm i 包名 -g
,其中,-g
表示全局安装某些包,通过-g
安装的包都在C:\Users\用户名\AppData\Roaming\npm
下面
Node模块化
核心模块
- 什么是核心模块:官方,发现一些功能模块使用非常频繁,然后,官方把这些模块,编译成了二进制可执行文件,然后打包到了Node的安装包中;所以,这些核心模块就已经随着安装Node时候,被安装到了本地;
- 如何使用核心模块 使用require(‘核心模块的名称’);
第三方模块
- 什么是第三方模块:出了官方提供的好用的核心模块之外,我们程序员发现,还有一些使用也很频繁的代码和方法,一些牛逼的团体、个人、公司,开发出了好用的模块,通过NPM官网,托管出去,供其他人下载使用的这些模块;统称为第三方模块;
- 如何使用第三方模块 - 通过moment这个第三方模块,来介绍如何使用一个第三方模块;
- 第三方模块的使用方式:
- 先使用npm下载这个模块!【注意:在安装第三方模块的时候,安装的名字,就是你在require时候导入的名字】
- 使用require导入这个第三方模块!
- 通过官方文档,试着去使用这个第三方模块!
- 注意:无论是核心模块、还是第三方模块,都是通过
标识符名称
来引用这个模块的!
用户模块
- 什么是用户模块:程序员自己定义的JS文件,统统数据用户模块!
- 推荐Node提供的exports
exports 和 module.exports
- 通过 module.exports 可以使用 . 的形式追加属性,也可以使用 等号 直接赋值的形式导出成员;
- exports 只能通过 . 的形式追加属性;不能使用 等号 直接赋值的形式!
- 注意: 在一个 module 中,最终向外暴露的成员,以 module.exports 指向的对象为准!
安装


创建Node.js应用
引入模块
var http = require("http");
编写代码
console.log('Node.js第一个程序')
运行文件命令:node 文件名

http -创建服务器
var http = require('http');
var server = http.createServer();
server.listen(3000, () => {
console.log('创建成功');
});
fs -文件系统
var fs = require('fs');
fs.readFile(__dirname + '/views/index.html', function (err, data) {
console.log(data.toString);
});
fs.writeFile(__dirname + '/views/index.html', '我是要写入的内容', function(err){
if (err){
console.log('写入失败')
}
console.log('写入成功')
}
项目
- 功能:登录检验、数据的增删改查
- 使用的模块
// 模板引擎 $ npm install art-template
var template = require('art-template');
function (req, res) {
let html = template(__dirname + '/views/login.html', {});
res.end(html)
}
// 处理文件上传 $ npm install formidable
var formidable = require('formidable');
var form = new formidable.IncomingForm();
form.uploadDir = __dirname + '/public/images'; // 图片保存的路径
form.keepExtensions = true; // 是否保留扩展名
// 完成函数
form.parse(req, function (err, fields, files) {
if (err) {
backInfo(err, res, '图片上传');
}
backInfo(null, res, '图片上传', path.basename(files.file.path));
});
// 数据库 $ npm install mysql
var mysql = require('mysql');
var connection = mysql.createConnection({
host: '127.0.0.1', // 连接的服务器
user: 'root', // 用户名
password: 'root', // 密码
database: 'heros' // 连接的数据库名
})
connection.connect(); // 连接
express
- 什么是Express.js:是一个基于Node.js的Web开发框架。Express框架并没有覆盖或删除原生的API,而是基于原生的API,做了进一步的封装,提供了更好用的一些API,方便快速进行Web开发!
- 使用
// 下载
$ npm install express
// 引入
var express = require('express');
// 创建app
var app = express();
- 原生node 与 express 的对比
http 的对比
// 原生node
var server = http.createServer();
server.listen(3001, () => {
console.log('创建成功');
});
server.on('request', (req, res) => {
router(req,res)
})
// express
var express = require('express');
var app = express();
app.listen(3000, function () {
console.log('运行成功');
});
静态文件处理的对比
// 原生node
if (url.indexOf('/style') == 0 || url.indexOf('/js') == 0 || url.indexOf('/images') == 0) {
...
}
// express
app.use(express.static('public'));
获取post请求数据对比
// 原生node
function (req, res) {
let str = '';
req.on("data", chunk => { //监听缓冲区中的数据,不断从缓冲区中获取数据
str += chunk;
})
req.on("end", () => { //监听数据是否获取完成
console.log(str)
})
// express
var bodyParser = require('body-parser'); // 下载: $ npm install body-parser
app.use(bodyParser.urlencoded({extended:false})); //解析 x-www-form-urlencoded
app.use(bodyParser.json()) // 只解析json
router.get('/',function (req,res){
console.log(req.body);
})
路由的对比
// 原生node
if (url === '/' && method == 'GET') {
// 处理逻辑
}
// express
// 快速路由器
var express = require('express');
var router = express.Router();
router.get('/', function(req,res){});
模板引擎使用的对比
// 原生node
var template = require('art-template');
router.get('/',function (req, res) {
let html = template(__dirname + '/views/index.html', { heros: data });
res.end(html)
})
// express
var template = require('express-art-template');
router.get('/',function (req,res){
res.render(__dirname + '/views/index.html',{ heros: data })
})