node 01 天
node.js 欢迎您,来到后台的世界。
学node.js 前的一些话
前端:主要关心的是交互。数据的展示(页面)。
后端:主要关系的数据。
1.什么是node.js
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
Node.js 的包管理器 npm,是全球最大的开源库生态系统。
2.node.js 的特点
单线程
非阻塞I/O
事件驱动
2. node.js 适合什么样的业务
高并发 大量 I/O 业务
考试系统
表单收集
聊天系统
图文直播
3.cmd 基本的命令
win + r 打开运行窗口 在运行里输入 cmd 执行 就能打开 cmd 面板
d: 切换盘符 切换到d 盘
cd 进入目录
. 当前目录
.. 上级目录
dir 查看当前目录下所有文件
cls 清屏
tab 补全
exit 退出
上下键切换 输入的历史记录
4. 安装 node.js
命令里操作
查看 node.js 版本号
node -v
node --help 帮助
npm -v 查看 npm 的版本号
npm install 模块名
例:
npm install jquery // 默认安装最新的版本
npm install jquery@1.8.3 // 安装指定版本的模块
5. node.js 环境
cmd 里
node 执行
ctrl + c 退出
执行某个文件
node 文件的路径
6. 模块
node.js 以模块为单位划分所有的功能。并提供一套完善的模块加载机制。
7. 自己定义模块
1. 直接通过 exports 暴露属性和方法
// 暴露属性
exports.pinpai = 'abc';
// 暴露方法
exports.fanghua = function(){
console.log('我已经开启防滑模式');
}
2. 暴露一个 暴露对象
function Hello() {
this.name = 'jack';
this.sex = 18;
this.say = function(){
console.log('我今年18岁');
}
};
// 暴露对象
module.exports = Hello;
使用模块
// 引入 hello 模块
var hello = require('./hello');
var myhello = new hello();
console.log(myhello.name);
myhello.say();
// 注意:
自定义模块 引入 的时候 require('./模块路径') 路径要完整, ./ 不能省略。
9. 引入模块
require('模块路径')
8. 系统模块
8.1 http 模块
// 引入 http 模块
var http = require('http');
// 创建服务
http.createServer(function(req,res){
/*
req request 请求的参数
res response 响应的参数
*/
// 响应头信息
res.writeHead(200,{"content-type":"text/html;charset=utf-8"});
// 响应文本
res.write('<h1 style="color:red">淫荡的一上午要结束了</h1>');
// 响应结束
res.end('<p>我也饿了<p>');
// 监听端口号
}).listen(3000)
node 02 天
linux 简单指令
ls 显示文件或目录
-l 详细信息
-a 显示所有文件 包括隐藏文件
cd 切换盘符
mkdir 创建目录
touch 创建一个空文件
echo 创建一个带内容的文件
例: echo '文件内容' > 文件路径(文件名)
echo 'hello wrokd' > 1.txt
cat 查询文件内容
编辑文件 vi
wc 统计文本的字数
cp 拷贝
cp file1 file2;
rm 删除文件
-r 递归删除
-f 强制删除
rmdir 删除空目录
buffer(缓冲区)
JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。
但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。
简单的操作:
// 存储的字节
var buf = new Buffer(9);
buf.write('你好帅');
console.log(buf.toString());
fs 文件模块
目录 操作
创建目录
删除目录
重命名目录
读取目录
文件操作:
创建文件
查看文件信息
删除文件
创建目录
fs.mkdir('test',function(err){
// err 错误信息的参数 如果 值是 null 成功
console.log(err); //null
if(err){
console.log('操作失败')
}else{
console.log('操作成功')
}
})
删除目录
fs.rmdir('test',function(err){
if(err){
console.log('操作失败')
}else{
console.log('操作成功')
}
})
重命名
fs.rename('test','abc',function(err){
if(err){
console.log('操作失败')
}else{
console.log('操作成功')
}
})
读取目录
// 读取目录
fs.readdir('abc',function(err,data){
if(err){
console.log('操作失败')
}else{
console.log(data);
}
})
创建文件
fs.writeFile('test.txt','你看我吊不?',function(err){
console.log(err);
})
查看文件信息
fs.stat('test.txt',function(err,data){
if(err){
console.log('操作失败')
}else{
console.log(data);
}
})
删除文件
// 删除文件
fs.unlink('test.txt',function(err){
if(err){
console.log('操作失败')
}else{
console.log('操作成功');
}
})
同步异步区别
// 异步读取
fs.readFile('input.txt',function (err, data) {
if (err) {
console.error(err);
}else{
console.log("异步读取: " + data.toString());
}
});
console.log('ok');
*/
// 同步读取
var data = fs.readFileSync('input.txt');
console.log("同步读取: " + data.toString());
console.log("==========程序执行完毕。==========");
url
var urlStr = 'http://www.baidu.com/index.php?name=jack';
// 把 url 格式成对象,
var res = url.parse(urlStr);
// console.log(res);
// console.log(res.query);
/*
Url {
protocol: 'http:',
slashes: true,
auth: null,
host: 'www.baidu.com',
port: null,
hostname: 'www.baidu.com',
hash: null,
search: '?name=jack',
query: 'name=jack',
pathname: '/index.php',
path: '/index.php?name=jack',
href: 'http://www.baidu.com/index.php?name=jack'
}
*/
var urlObj = {
protocol: 'http:',
host: 'www.google.com',
search: '?key=美女',
}
var myurl = url.format(urlObj);
console.log(myurl) //==> http://www.google.com?key=美女
path
var url = 'http://www.baidu.com/admin/userlist/index.php';
// 获取路径
var dirname = path.dirname(url);
console.log(dirname); // => http://www.baidu.com/admin/userlist
var fileName = path.basename(url);
console.log(fileName); // => index.php
var extName = path.extname(url);
console.log(extName); // .php 扩展名
querystring
// 例子 1:
var qs = require('querystring');
var data = 'username=jack&age=18&sex=男';
var res = qs.parse(data); // => { username: 'jack', age: '18', sex: '男' }
console.log(res);
console.log(res.sex)
// 例子2:
var qs = require('querystring');
var data = 'username=%E5%94%90%E4%BC%AF%E8%99%8E&age=18&sex=男';
var res = qs.parse(data); // => { username: '唐伯虎', age: '18', sex: '男' }
console.log(res);
console.log(res.sex)
golbal
// 当前运行文件的路径
console.log(__filename); // => C:\phpStudy\WWW\H5_28\node03\global\02.js
// 目录名
console.log(__dirname); // => C:\phpStudy\WWW\H5_28\node03\global
// var i = 0;
/*setInterval(function(){
console.log(++i);
},1000);
*/
setTimeout(function(){
console.log('ok')
},3000)
路由
// 引入 http 模块
var http = require('http');
// 引入文件模块
var fs = require('fs');
// 创建服务
http.createServer(function(req,res){
/*
req 请求的参数
res 响应的参数
*/
console.log(req.url);
if(req.url=='/login'){
// 读取文件
fs.readFile('./html/login.html',function(err,data){
if(err){
// 响应的头信息
res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
// 响应模版
res.end('读取页面失败');
}else{
// 响应的头信息
res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
// 响应模版
res.end(data);
}
})
}else if(req.url == '/show'){
// 读取文件
fs.readFile('./html/show.html',function(err,data){
if(err){
// 响应的头信息
res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
// 响应模版
res.end('读取页面失败');
}else{
// 响应的头信息
res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
// 响应模版
res.end(data);
}
})
}else if(req.url == '/'){
// 读取文件
fs.readFile('./html/index.html',function(err,data){
if(err){
// 响应的头信息
res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
// 响应模版
res.end('读取页面失败');
}else{
// 响应的头信息
res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
// 响应模版
res.end(data);
}
})
}else if(req.url=='/404.jpg'){
// 读取图片
fs.readFile('./html/404.jpg',function(err,data){
// 响应的头信息
res.writeHead(200,{'content-type':'image/jpg'});
// 响应模版
res.end(data);
})
}else if(req.url == '/style.css'){
// 读取文件
fs.readFile('./html/style.css',function(err,data){
// 响应的头信息
res.writeHead(200,{'content-type':'text/css;charset=utf-8'});
// 响应模版
res.end(data);
})
}else{
// 读取文件
fs.readFile('./html/404.html',function(err,data){
if(err){
// 响应的头信息
res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
// 响应模版
res.end('读取页面失败');
}else{
// 响应的头信息
res.writeHead(404,{'content-type':'text/html;charset=utf-8'});
// 响应模版
res.end(data);
}
})
}
// 监听端口
}).listen(3000)
npm 使用
npm init 初始化 会给我们生成 package.json
npm install 安装 package.json 文件里 需要依赖 的所有模块
npm install 模块名 --save // 把下载的模块 保存到 package.json 文件里 需要依赖的 dependencies 属性里
// 查看 模块 的所有版本
npm view 模块名 versions
npm 下载模块
ejs 模版引擎
前端的 bootstrap
express node.js 框架
路由
// 引入 express 框架
var express = require('express');
var app = express();
// express 路由
app.get('/admin',function(req,res){
res.send('这是后台');
});
// 首页
app.get('/',function(req,res){
res.send('首页')
})
// 通配
app.get('*',function(req,res){
res.send('404');
})
app.listen(3000);