node.js基础知识(一)

相关网站

中文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安装

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351