// 表示引入http模块
var http = require('http');
/*
request 获取url传过来的信息
response 给浏览器响应信息
*/
http.createServer(function(request, response) {
// 设置响应头
response.writeHead(200, { 'Content-Type': 'text/plain' });
// 表示给页面上面输出一句话并且结束响应
response.end('Hello World');
}).listen(8081); // 端口
console.log('Server running at http://127.0.0.1:8081/');
var http = require('http');
var url = require('url');
http.createServer(function(request, response) {
response.writeHead(200, { 'Content-Type': 'text/html;charset="utf-8"' });
response.write(" ");
console.log(request.url);
if (request.url != '/favicon.ico') {
var userInfo = url.parse(request.url, true).query;
console.log(`姓名:${userInfo.name} -- 年龄:${userI}`);
}
response.end();
}).listen(8081);
supervisor会不停地watch你应用下面的所有文件,发现有文件被修改,就重新载入程序文件这样就实现了部署,修改了程序文件后马上就能看到变更后的结果。不用再重启代码了。
首先安装supervisor。
npm install supervisor -g //windows
sudo npm install supervisor -g //mac
使用supervisor代替node命令启动应用。
module.exports = xxx;
。npm init --yes
生成package.json文件,package.json中的main代表“入口”。包:Nodejs中除了他自己提供的核心模块外,我们可以自定义模块,也可以使用第三方的模块。Nodejs中第三方模块由包组成,可以通过包来对一组具有相互依赖关系的模块进行统一管理。
完全符合CommonJs规范的包目录一般包含如下这些文件。
在Nodejs中通过npm命令来下载第三方的模块(包)。
NPM介绍:
npm是随同Nodejs一起安装的包管理工具,能解决Nodejs代码部署上的很多问题,使用场景:
npm init --yes
来导入package.json文件。npm install md5
而是使用npm install md5 --save
我们就可以在package.json文件的dependencies区域发现一段代码:以后我们要将项目发送给别人就只需要发送下面的文件,不需要发送上面的node_modules文件夹,然后通过一句npm i
就会将项目所需要的依赖一个一个安装上。
npm-v
:查看npm版本。npm install Module Name
:安装模块。npm uninstall Module Name
:卸载模块。npm list
:查看当前目录下已安装的node包。npm info 模块
:查看模块的版本。npm install 模块@指定版本
:安装指定版本的包(非常重要)。package.json定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)
npm init 或者 npm init --yes
{
"name": "demo02",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"md5": "^2.3.0",
"silly-datetime": "^0.1.2"
}
"devDependencies": {
}
}
dependencies与devDependencies之间的区别?
npm install node_module -save
自动更新 dependencies 字段值;npm install node_module -save-dev
自动更新 devDependencies 字段值;^
表示第一位版本号不变,后面两位去最新的。
~
表示前两位不变,最后一个取最新的。
*
表示全部取最新的。
npm包官网
淘宝npm镜像官网
淘宝NPM镜像是一个完整的npmjs.org镜像,你可以用此代替官方版本(只读),同步频率目前为10分钟一次以保证尽量与官方服务同步。
我们可以使用我们定制的cnpm(gzip压缩支持)命令行工具代替默认的npm:
npm install -g cnpm --registry=https://registry.npm.taobao.org
(mac系统加sudo添加权限)之后我们就可以通过cnpm替代npm了。
/*
1. fs.stat 检测是文件还是目录
2. fs.mkdir 创建目录
3. fs.writeFile 创建写入文件
4. fs.appendFile 追加文件
5. fs.readFile 读取文件
6. fs.readdir 读取目录
7. fs.rename 重命名
8. fs.rmdir 删除目录
9. fs.unlink 删除文件
*/
const fs = require('fs');
// 1. fs.stat 检测是文件还是目录
// fs.stat('./html', function(err, data) {
// if (err) {
// console.log(err);
// return;
// }
// console.log(`是文件:${data.isFile()}`);
// console.log(`是目录:${data.isDirectory()}`);
// });
// 2. fs.mkdir 创建目录
/*
path:将创建的目录路径
mode:目录权限(读写权限),默认777
callback:回调,传递异常参数err
*/
// fs.mkdir('./css', function(err) {
// if (err) {
// console.log(err);
// return;
// }
// console.log('创建成功');
// });
// 3. fs.writeFile 创建写入文件(如果存在会替换文件)
// (path: string | number | Buffer | URL, data: string | Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | ... 5 more ... | DataView, callback: NoParamCallback)
// fs.writeFile('./html/index.html', '你好nodejs', (err) => {
// if (err) {
// console.log(err);
// return;
// }
// console.log('创建写入文件成功');
// });
// 4. fs.appendFile 追加文件
// fs.appendFile('./css/base.css', 'bodu{color: red}', (err) => {
// if (err) {
// console.log(err);
// return;
// }
// console.log('appendFile 成功');
// });
// fs.appendFile('./css/base.css', 'h2{color: red}', (err) => {
// if (err) {
// console.log(err);
// return;
// }
// console.log('appendFile 成功');
// });
// 5. fs.readFile 读取文件
// fs.readFile('./html/index.html', (err, data) => {
// if (err) {
// console.log(err);
// return;
// }
// console.log(data);//
// console.log(data.toString());//你好nodejs
// });
// 6. fs.readdir 读取目录
// fs.readdir('./html', (err, data) => {
// if (err) {
// console.log(err);
// return;
// }
// console.log(data);//[ 'index.html', 'news.html' ]
// });
// 7. fs.rename 重命名 功能:1、重命名 2、移动文件
// fs.rename('./css/aaa.css', './css/index.css', (err) => {
// if (err) {
// console.log(err);
// return;
// }
// console.log('重命名成功');
// });
// fs.rename('./css/index.css', './html/index.css', (err) => {
// if (err) {
// console.log(err);
// return;
// }
// console.log('移动文件成功');
// });
// 8. fs.rmdir 删除目录
// fs.rmdir('./aaa', (err) => {
// if (err) {
// console.log(err);
// return;
// }
// console.log('删除目录成功');
// });
// 9. fs.unlink 删除文件
// fs.unlink('./aaa/index.html', (err) => {
// if (err) {
// console.log(err);
// return;
// }
// console.log("删除文件成功");
// });
这几种方法需要掌握好:
fs.stat 检测是文件还是目录
fs.mkdir 创建目录(下载mkdirp可创建多级目录)
fs.writeFile 创建写入文件
fs.appendFile 追加文件
fs.readFile 读取文件
fs.readdir 读取目录
fs.rename 重命名
fs.rmdir 删除目录
fs.unlink 删除文件
1.let const 模板字符串
2.箭头函数
3.对象、属性的简写
4.模板字符串
5.Promise
/*
1.let const 模板字符串
2.箭头函数
3.对象、属性的简写
4.模板字符串
5.Promise
*/
// 1.let const 模板字符串
// if (true) {
// let a = 123;
// }
// console.log(a);//a is not defined
// 2.箭头函数
// setTimeout(() => {
// console.log('执行');
// }, 1000);
// 3.对象、属性的简写
// var name = 'Aniu';
// var app = {
// name
// }
// console.log(app.name);//Aniu
// var name = 'zhangsan';
// var app = {
// name,
// run() {
// console.log(`${this.name}在跑步`);
// }
// }
// app.run();//zhangsan在跑步
// 4.模板字符串
// var name = '张三';
// var age = 20;
// console.log(`${name}的年龄是${age}`);//张三的年龄是20
// 5.Promise
// 通过回调函数获取异步方法中的数据
// function getData(callBack) {
// setTimeout(function() {
// var name = '张三';
// callBack(name);
// }, 1000);
// }
// getData(function(aaa) {
// console.log(aaa);
// });
// Promise来处理异步 resolve 成功的回调函数 reject失败的回调函数
function getData(resolve, rejest) {
setTimeout(function() {
var name = '张三李四';
resolve(name);
}, 1000);
}
var p = new Promise(getData);
p.then(function(data) {
console.log(data);
});
// 普通方法
// function test() {
// return '您好nodejs';
// }
// console.log(test());
// 异步方法
// async function test() { //Promise { '您好nodejs' }
// return '您好nodejs';
// }
// // console.log(await test());//报错: await必须得用在async的方法里面
// async function main() {
// var data = await test(); //获取异步方法里面的数据
// console.log(data);
// }
// main();//您好nodejs
async function test() {
return new Promise((resolve, reject) => {
setTimeout(function() {
var name = "张三 222";
resolve(name);
}, 1000);
});
}
async function main() {
var data = await test(); //获取异步方法里面的数据
console.log(data);
}
main();
const fs = require('fs');
var readStream = fs.createReadStream('./data/input.txt');
var count = 0;
var str = '';
readStream.on('data', (data) => {
str += data;
count++;
});
readStream.on('end', () => {
console.log(str);
console.log(count);//分多次读取,一点一点读取
});
readStream.on('error', (err) => {
console.log(err);
});
const fs = require('fs');
var str = '';
for (var i = 0; i < 500; i++) {
str += '今天是七夕节学布谷鸟叫的人也不一定是好人\n';
}
var writeStream = fs.createWriteStream('./data/output.txt');
writeStream.write(str);
// 标记写入完成
writeStream.end();
writeStream.on('finish', () => {
console.log('写入完成');
});
const fs = require('fs');
var readStream = fs.createReadStream('./kk.png');
var writeStream = fs.createWriteStream('./data/kk.png');
readStream.pipe(writeStream);
适合复制比较大的文件。