第一讲:环境准备
安装完成后在命令行窗口中输入node -v 输出node的版本号;
在命令行窗口中输入npm -v 输出npm的版本号;
3、环境配置
在安装node.js的时候自动配置好了npm(node package management)--》node包管理器
如何配置npm的路径;
这里的环境配置主要配置的是npm安装的全局模块所在的路径,以及缓存cache的路径,之所以要配置,是因为以后在执行类似:npm install express [-g] (后面的可选参数-g,g代表global全局安装的意思)的安装语句时,会将安装的模块安装到【C:\Users\用户名\AppData\Roaming\npm】路径中,占C盘空间。
这是我的配置路径
在node的安装路径下建立两个新的文件夹node_cache和node_global空文件夹;
创建完成后:
打开cmd命令窗口:
输入:
npm config set prefix D:\app_install\nodejs\node_global npm config set cache D:\app_install\nodejs\node_cache |
如果在这个过程中,不小心你的npm被你玩坏了,则按照以下方法进行:
删除C:\Users\{账户}\下的.npmrc文件; 如果删除了也没用,然后搜了下全电脑的.npmrc文件 发现C:\Users\{账户}\AppData\Roaming\npm 这个目录下有很多卸载之前的 npm的东西,就把这个npm整个目录都删了,就好了。 |
然后配置系统路径:
电脑--》右键属性--》高级系统设置--》用户变量--》修改path,然后改为路径为D:\app_install\node\node_global\node_modules
在系统变量中,添加NODE_PATH ,值为D:\app_install\node\node_global\node_modules,不要加分号;
4、测试
windows+R--》cmd-->输入node -v 显示node的版本号
输入npm -v 显示npm的版本号
测试模块安装和卸载
npm config set registry
https://registry.npm.taobao.org 这是临时仓库
(2)、在终端输入npm install express -g进行安装(express是常用的 Node.js web框架模块)
安装成功之后出现如下界面:
并且查看是否安装成功;
(3)、卸载模块express,在终端输入npm uninstall express -g
卸载成功出现如下界面:
详情:
https://www.cnblogs.com/Andrea-Li/p/8781349.html
npm的包安装分为本地安装(local)、全局安装(global)两种
本地安装:
npm install xxx 安装到命令行所在目录的node_module目录,该目录不存在则自动创建。
全局安装:
npm install xxx -g 安装到 我们设置的NODE_PATH 中;
设置npm的中央仓库:
//设置淘宝源
npm config set registry
https://registry.npm.taobao.org 这是临时仓库
//设置公司的源
npm config set registry http://127.0.0.1:4873
//查看源,可以看到设置过的所有的源
npm config get registry
测试:
let express = require('express'); let app = express(); app.get('/',(req,res)=>{ res.send("hello world"); }); app.listen(3000,()=>{ console.log('在服务器端运行'); }); |
建立hello.js写入以上代码
使用cmd窗口,运行改代码,如果出现一下图片代表成功;
然后在浏览器地址栏中输入http://localhost:3000,出现如图效果:
代表我们的npm配置是成功的;
console.log(__dirname);
模块分为三种:
内置模块
第三方模块
自定义模块
详细介绍自定义模块:
创建一个模块(一个js文件就是一个模块),这是test.js
let name = { sayHello(){ console.log("hello,world"); } } module.exports=name |
引用一个模块并且调用,在demo中使用导入该模块
let Module = require('./test') console.log(Module); Module.sayHello(); |
repl-->就是当前在命令行执行;
官方帮助文档:
http://nodejs.org/dist/v10.16.0/docs/api/
let fs = require("fs"); //创建文件夹 //fs.mkdir('./hello',(err,data)=>{ // console.log(err); // console.log(data); //}); //修改文件夹 //fs.rename('./hello','./testyyh',(err)=>{ // if(err){ // console.log("error"); // }else{ // console.log("ok"); // } //}); //删除文件夹-->只能删除空文件夹 fs.rmdir('./testyyh',(err)=>{ if(err){ console.log('删除失败'); console.log(err); }else{ console.log('ok'); } |
二、文件的操作
const fs = require('fs'); //创建文件,覆盖写入,正常的话则是追加 //fs.writeFile('test.txt','这是我的第一个文件',(err)=>{ // if(err){ // console.log('创建失败'); // console.log(err); // }else{ // // console.log('创建成功!'); // } // //}); //读取文件,在原来的基础上追加文件 //fs.appendFile('test.txt','韩梅梅你好',(err)=>{ // console.log(err); //}); //读取文件这是第一种方式 //fs.readFile('test.txt',(err,msg)=>{ // console.log(err); // console.log(msg.toString("utf8"));//在转化为字符串的时候指定编码方式 //}); //在参数中指定编码方式 //fs.readFile('test.txt','utf8',(err,msg)=>{ // // console.log(err); // console.log(msg); //}); //删除文件 //fs.unlink('./test.txt',(err)=>{ // console.log(err); //}); |
判断是文件还是目录
const fs = require('fs'); fs.readdir('./',(err,dirs)=>{ for(let index=0;index<dirs.length;index++){ console.log(dirs[index]); } }); fs.stat('./',(err,stats)=>{ if(stats.isFile()){ console.log('是一个文件'); }else{ console.log('是一个目录'); } }); |
什么是json ,对象,什么是json字符串,
json-->就是特定的格式;
json对象--》具备json格式的对象;
json字符串--》是具备json格式的字符串
const qs = require('querystring'); //let str = "name=wangyi&pass=123&sex=0"; //let obj = qs.parse(str,'&','='); //console.log(obj); //let obj = {name:'wangyi',sex:'0'}; //let str = qs.stringify(obj); //console.log(str); let str = "name=你好&pass=123"; let esstr = qs.escape(str); console.log(esstr); console.log(qs.unescape(esstr)); |
四、第三方插件
npmjs-->百度
npm install jquery --save
nodemailer-->可以实现邮件的发放;
const nodemailer=require('nodemailer'); let from = nodemailer.createTransport({ host:'smtp.qq.com', port:465, secure:true, auth:{ user:"553285472@qq.com", pass:"kjmrzpsavgznbfha" } }); let mailobj = { from:'"Fred Foo " <553285472@qq.com>', to:"553285472@qq.com", subject:"我在做测试", text:"您的验证码是:wer89r,五分钟有效" } from.sendMail(mailobj,(err,data)=>{ console.log(err); console.log(data); }); |
const request = require('request') const fs = require('fs') const cheerio = require('cheerio') request('https://www.qunar.com', function (error, response, body) { console.log('error:', error); // 错误优先 console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received // fs.writeFileSync('./qn.html',body,'utf8') //获取爬取网站的页面信息 const $ = cheerio.load(body) let imgs = [] //目标网站图片链接地址数组 // 用正则判断数组中的路径是否存在https var _ = /(http[s]?|ftp)/; $('img').each((i, e) => { // 遍历所有 var src = $(e).attr('src'); if (!_.test(src)) { src = src.replace(/\/数据库/, 'https://') //因为有些图片不可下载,所以用正则判断一下 } imgs.push(src) }) // 下载数组里的图片 for (let index = 0; index < imgs.length; index++) { if (imgs[index].indexOf('http') !== -1) { request(imgs[index]).pipe(fs.createWriteStream(`./img/${index}.png`)) //这里为了省事,我就直接用下标命名了; } } }); |
cheerio案例
const cheerio = require("cheerio"); let $=cheerio.load("<div><p>你好</p><img src='http://wwww.baidu.com'/></div>"); console.log($('img').attr('src'));//获取所有img的src console.log($('p').text());//获取所有的p标签中的文本 |
服务器本身就是一台电脑,该电脑上有服务器软件,根据服务器的ip地址和端口号进行访问;
局域网:服务器通过网线连接或者无线,每台电脑上都有ip
ip:确定服务器主机的位置;
端口号:确定服务器里的某一个程序;
api接口的构成要素:
ip
port
pathname
method:get post
接受用户传递的数据
get方式:req.query
post方式:req.body,但是需要body-parser这个插件
postman接口测试
查看某个端口对应的进程:netstat -ano |findstr 端口号---》得到进程号
杀掉某个进程taskkill -pid 进程号 -f
路由:
安装mongodb:最后一个不选,必须建立一个data\db文件夹
注意事项:检测是否安装成功:在cmd命令行窗口敲入mongod(启动数据库命令)
查看数据库:mongo(命令行操作数据库) show dbs
安装完成后需要配置环境变量,配置到bin目录下;
mongoose 这是node操作数据库的插件
let mysql = require("mysql");//引入mysql let con = mysql.createConnection({//创建连接 host:'127.0.0.1', user:'root', password:'123@qwe', database:'schooldb' }); con.connect();//建立连接 // let sql ="select * from class"; // con.query(sql,(error,results,fields)=>{ // if(error){ // console.log('select error',error.message); // return; // } // console.log(results); // }); //添加 // let sql = "insert into class(classname,begintime,endtime,gradeid) values(?,?,?,?)"; // let appPrarams = ['A156','2019-05-06','2021-05-06',2]; // con.query(sql,appPrarams,(err,results)=>{ // if(err){ // throw err; // }else{ // console.log("添加成功"+results); // } // }); //修改 // let sql = "update class set classname = ? where classid = ?"; // let modParams = ['A156',36]; // con.query(sql,modParams,(err,results)=>{ // if(err){ // console.log(err); // }else{ // console.log(results); // } // }); //删除 let sql = "delete from class where classid = ?"; let delParams = 36; con.query(sql,delParams,(err,results)=>{ if(err){ console.log(err); }else{ console.log(results); } }); |