相关网站
中文API:http://nodejs.cn/api/
开源中国小工具:https://tool.oschina.net
npm组件库 :https://www.npmjs.com
npm命令文档:https://www.npmjs.cn
vscode开发工具:https://code.visualstudio.com/
正则表达式测试:https://tool.oschina.net/regex/
版本说明
本次使用的node.js版本是v10.16.3,npm版本6.9.0
基本概念
node.js:不是一门编程语言,类似于.net,是一个平台,使用javascript进行编程
npm:node.js包管理工具、仓库
下载使用
进入node.js官网网站下载:https://nodejs.org/en/
LST是稳定发布版,安装node.js会自动安装npm
项目初始化
npm init -y
执行命令之后会在当前项目的文件夹下生成package.json文件,管理包的依赖关系
第三方包的安装
npm install 或者 npm i
1、包的安装可以在npm的官网搜索,高版本的npm会在当前项目文件夹下生成package-lock.json,这个文件是收到yarn的启发,为了加快安装包而建立的,里面有第三方包详细的地址以及依赖引用;另外,加参数-g是全局安装,只是为了在任何地方可以使用这个命令而已,项目中要require引用的时候,一定要本地安装(即不加-g)
2、npm 5.0+ 版本在默认情况下会将安装的模块添加到 package.json 文件中的 dependencies 列表中。对于较老的 npm 版本,你就必须指定 --save 参数
常用命令
//执行node.js文件
node xxx.js
//卸载第三方包
npm uninstall 或者 npm un
//查询该命令的帮助信息
npm help 命令名
路径-path
const path = require('path');
const p = path.join(__dirname,'htmls','index.html');
console.log(p);
__dirname表示当前js所在文件夹的绝对路径
__filename表示当前js文件的绝对路径
path是node.js内置的,不需要install
文件操作-fs
const fs = require('fs');
const path = require('path');
//在项目文件下写入test.txt文件
var txt_file = path.join(__dirname,'test.txt');
fs.writeFile(txt_file,'浅游的鱼',function(err){
//如果有错误,err不为空
if(err){
throw err;
}
});
//文件读取
fs.readFile(txt_file, 'utf8', function(err, data){
//错误码ENOENT表示找不到文件
if(err && err.code !== 'ENOENT'){
throw err;
}
console.log(data);
//var list = JSON.parse(data || '[]');
});
fs.writeFile和fs.readFile都是异步的操作,错误信息或者数据都是在回调函数里面获取
fs.readFile如果不加编码utf8的情况下,data会返回Buffer类型而不是string
获取异步数据方式
const fs = require('fs');
const path = require('path');
readData(function(data){
console.log(data);
})
function readData(callback){
fs.readFile(path.join(__dirname,'test.txt'),'utf8',function(err, data){
if(err && err.code !== 'ENOENT'){
throw err;
}
callback(data);
})
}
捕获异常 try-catch
var fs = require('fs');
try {
//fs.writeFile是异步操作,trycatch没法捕获到,只能在异步方法的回调函数的err.code判断错误号
fs.writeFile('./xxx/test.txt','你好世界',function(err){
if(err){
console.log(err.code)
console.log(err);
}
console.log('ok')
})
} catch (error) {
console.log('出错了:'+error);
}
JSON格式转换
var obj1 = {name : '张三', age: 18};
var obj2 = {name : '李四', age: 20};
var list = [];
list.push(obj1);
list.push(obj2);
//转换成json格式的字符串
var str = JSON.stringify(list);
console.log(str);
//转换成json对象(数组)
var ls = JSON.parse(str);
console.info(ls);
网络服务-http
const http = require('http')
//解析url使后台更易取到各个参数
const url = require('url');
http.createServer(function(req,res){
console.log(req.url);
if(req.url === '/test1'){
// res.setHeader('Content-Type','text/html; charset=utf-8');
res.setHeader('Content-Type','text/plain; charset=utf-8');
//返回信息并结束响应
res.end('请求成功');
}else if(req.url === '/test2'){
//重定向
// res.statusCode = 302;
// res.statusMessage = 'Found';
// res.setHeader('Location','/redirect');
//简写方式
res.writeHead(302,'Found',{
'Location':'/redirect'
});
res.end();
}else if(req.url === '/redirect'){
res.setHeader('Content-Type','text/plain; charset=utf-8');
res.end('重定向页面');
}else if(req.url.startsWith('/test3')){
//解析url并将参数转换成对象,通过属性query获取
var urlObj = url.parse(req.url,true);
console.log(urlObj);
console.log(urlObj.query['name'])
res.end('success');
}else{
res.end('not found');
}
}).listen(8888,function(){
console.log('服务已启动')
})
文件类型识别-mime
const mime = require('mime');
var type = mime.getType('txt');
var t = mime.getType('/path/test.png')
console.log(type);
console.log(t)
//text/plain
//image/png
使用之前,通过npm install mime安装
常用工具包-underscore
const _ = require('underscore');
//声明了一段模板代码的html文档
var html = '<h2><%= name %></h2>';
//返回的是一个函数
var fn = _.template(html);
//fn接收一个数据对象,并用该数据对象,将html模板内容替换,生成最终的html文本
var txt = fn({name: 'haha'});
console.log(txt);
//<h2>haha</h2>
使用之前,先通过npm install underscore安装