http、url模块 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 const http = require ('http' );http.createServer( (req, res ) => { res.writeHead(200 , {'Content-Type' : "text/html;charset='utf-8'" }); res.write("<head><meta charset='UTF-8'></head>" ) console .log(req.url); if (req.url!='/favicon.ico' ) { var userinfo=url.parse(req.url,true ).query; console .log(`姓名:${userinfo.name} --年龄:${userinfo.age} ` ); } res.end(); }).listen(3000 ); console .log('Server running at http://127.0.0.1:3000/' );
可使用node xx.js来启动程序,但是每次更新都要重启,因此可以使用supervisor工具来使其不用重启也能更新。它会不停的watch应用下的所有文件,一旦更新就会立刻重新部署
Commonjs 1 2 3 4 5 6 7 8 9 10 exports .xxx=obj;model.exports=obj; var request = require ('./xxx/xx' )request.xxx.get(); request.get();
npm init --yes
自定义生成模块之后可以通过该方法生成package.json来方便引用。
也可以使用es6的格式来导包,只是需要添加设置:在init生成了package.json之后,在其中加上“type”: “module”
,然后就可以使用es6的样式来导包了。
fs–文件系统 fs.mkdir
语法:fs.mkdir(path[, options], callback)
同步:fs.mkdirSync()
额外知识点:可以添加 recursive: true 参数,不管创建的目录 /tmp 和 /tmp/a 是否存在:
1 2 3 4 fs.mkdir('/tmp/a/apple' , { recursive : true }, (err ) => { if (err) throw err; });
fs.readdir
语法:fs.readdir(path, callback)
返回一个数组,其值是由该文件夹下每个文件的名称组成.
它没有同步语法.
fs.writeFile
语法:fs.writeFile(file, data[, options], callback)
同步:fs.writeFileSync()
它向指定文件写入数据,若文件不存在则创建它
fs.appendFile
语法:fs.appendFile(path, data[, options], callback)
同步:fs.appendFileSync()
它向指定文件追加写入数据,若文件不存在则创建它
fs.readFile
它有同步语法fs.readFileSync(path,(err,data)=>{})
它作用是读取指定文件夹的数据
它读取出来的是buffer数据
1 2 3 4 5 const fs = require ('fs' );var data = fs.readFileSync("./tmp/num.txt" );console .log(data);
fs.unlink
它的作用是删除指定位置的文件
文件夹内文件未完全删除不可删除文件夹
它有同步语法
fs.rmdir
fs.stat
1 2 3 4 5 6 7 8 9 const fs = require ('fs' );fs.stat('./html' , (err, data ) => { if (err) { console .log(err); return ; } console .log(`是文件:${data.isFile()} ` ); console .log(`是目录:${data.isDirectory()} ` ); });
fs.rename
作用1:用于给文件或文件夹更名
作用2:用于转移文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 const fs = require ('fs' );fs.rename("./html" , "./html5" , (err ) => { if (err) { console .log(err); return ; } console .log('重命名成功' ); }); const fs = require ('fs' );fs.rename('./index.html' , './html5/index.html' , (err ) => { if (err) { console .log(err); return ; } console .log('转移文件成功' ); });
mkdirp工具实现类似于linux中的mkdir -p递归创建目录及其子目录。
1 2 3 4 5 const mkdirp = require ('mkdirp' )mkdirp('/tmp/foo/bar/baz' ).then(made => console .log(`made directories, starting with ${made} ` ))
fs.createReadstream() 从文件流中读取数据
1 2 3 4 5 6 7 8 9 10 11 12 13 const fs = require ('fs' ) var fileReadStream = fs.createReadStream('data.json' ) let count=0 ; var str='' ; fileReadStream.on('data' , (chunk ) => { console .log(`${ ++count } 接收到:${chunk.length} ` ); str+=chunk }) fileReadStream.on('end' , () => { console .log('--- 结束 ---' ); console .log(count); console .log(str); }) fileReadStream.on('error' , (error ) => { console .log(error) })
Fs.createWriteStream() 写入文件
1 var fs = require ("fs" ); var data = '我是从数据库获取的数据,我要保存起来' ;
管道流 当要传输大文件的时候用到的
callback的异步处理 1 2 3 4 5 6 7 8 9 10 function getDate (callback ) { setTimeout (function ( ) { var name = 'hhh' ; callback(name) }, 1000 ) } getDate(n) => { console .log(n) }
promise的异步处理 1 2 3 4 5 6 7 8 9 var p = new Promise (function (resolve, reject ) => { setTimeout (function ( ) { var name = 'hhh' ; callback(name) }, 1000 ) }) p.then(data => { console .log(data) })
async、await处理异步方法
async 是让方法变成异步。
await 是等待异步方法执行完成。
使用async之后会将方法的返回值变为Promise。
1 2 3 4 5 async function test ( ) { return '您好nodejs' ; } console .log(test());
用await虽然可以取出async中返回的值,但是也要在async方法中。
对于await的使用,根据对象的不同会执行不同的操作。
如果不是 promise , await会阻塞后面的代码,先执行async外面的同步代码,同步代码执行完,再回到async内部,把这个非promise的东西,作为await表达式的结果。
如果它等到的是一个 promise 对象,await 也会暂停async后面的代码,先执行async外面的同步代码,等着 Promise 对象 fulfilled,然后把 resolve 的参数作为 await 表达式的运算结果。
1 2 3 4 5 6 async function test ( ) { return '您好nodejs' ; } console .log(await test());
正确使用形式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 async function test ( ) { return '您好nodejs' ; } async function main ( ) { var data=await test(); console .log(data); } main(); 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();