目录
1.引入http模块和创建服务器 http.createServer();
5.req.url 路由(端口号后面的部分就是路由:req.url)
6.浏览器地址栏输入的地址不一样,向请求服务器请求的页面就不一样怎么写?
2.第三方模块:别人写好的,我们直接拿过来用。+ npm相关指令
4.服务器除了自己写,还可以用他人写的eg:Apach,Nginx
nodejs模块主要分为三类:系统模块 第三方模块 自定义模块
其中保存的是字符串, 当前的js文件 所在的目录(是地址,字符串)。

这是异步的。
- let fs = require('fs');
- fs.readFile('./index.html',{encoding:'utf-8'},(err,data)=>{
- if(!err){
- console.log(data);
- }
- });
分析:{encoding:'utf-8'} 这个参数可以省略,字符编码的意思。
这是异步的。
fs.writeFile(path ,data,callback(err)) 如果文件存在,该方法写入的内容会覆盖旧的文件内容,不存在就创建一个新的文件。
注意:如果不要覆盖掉以前的,就要利用fs.writeFile省略的第3个参数:
- let fs = require('fs');
- fs.writeFile('./a.txt','你好啊',{flag:'a'},(err)=>{
- if (!err) {
- console.log(666);
- }
- });
分析:参数 {flag:'a'} 的意义就是不覆盖掉以前的,直接在以前的后面写。
eg:以前的a.txt文件内容为:花花是美丽女孩。现在是:花花是美丽女孩。你好啊。
这是异步的。
注意:一次性只能创建一个文件夹,一次性创建多个会报错。
- // 导入fs模块
- let fs = require('fs');
- fs.mkdir('./public/css',(err)=>{
- if(!err){
- console.log(666);
- }else{
- console.log('出错了');
- }
- });
-
- //出错了,一次性创建了两个文件夹 ./public/css (public和css都没创建过)
- // 导入fs模块
- let fs = require('fs');
- fs.mkdir('./public',(err)=>{
- if(!err){
- console.log('创建成功',666);
- }else{
- console.log('出错了');
- }
- });
- //创建成功 666
注意:如果想一次性创建多个目录,就用fs.mkdir省略的 第二个参数{recursive:true}
- // 导入fs模块
- let fs = require('fs');
- fs.mkdir('./upload/hh',{recursive:true},(err)=>{
- if(!err){
- console.log('创建成功',666);
- }else{
- console.log('出错了');
- }
- });
- //创建成功 666
分析: fs.mkdir省略的 第二个参数 {recursive:true} 可以让一次性创建多个目录。

要copy的文件:是前端发送给后端的文件,在前端电脑上保存的文件
后端接收:let clientData = ctx.request.files


copy到新的文件路径(包括新的文件的名字)):

- let newimgpath = path.dirname(__dirname)+`/public/upload/${path.basename(clientData[0].filepath)}`
- fs.copyFileSync(clientData[0].filepath,newimgpath);
如果 分割符是 \ ,则返回本第磁盘(意义不大)
- let path = require('path');
- console.log(path.dirname('F:\A_class\node')); //F:
如果分隔符是 / ,则返回
- //js文件中
- let path = require('path');
- console.log(path.dirname('F:/A_class/node')); //F:/A_class
分析:如果是以文件夹结尾,path.dirname返回的是当前js文件所在文件夹的上一个文件夹的路径。
eg:这个js文件所在文件夹是node文件夹,node文件夹上一个文件夹是 A_class.返回的是
F: /A_class
- let path = require('path');
- console.log(path.dirname('F:/A_class/node/fs.js')); //F:\A_class\node
分析:返回的结果是当前文件所在的文件夹的路径。
- let path = require('path');
- console.log(path.basename('F:/A_class/node')); //node
分析:得到的是最后一个文件夹名。
- let path = require('path');
- console.log(path.basename('F:/A_class/node/fs.js')); //fs.js
分析:得到的是最后一个文件名。
- //引入http模块
- let http = require('http');
- //创建自己的服务器 (返回的是一个对象)
- let server = http.createServer();
- //监听服务器 (对象调on方法)
- server.on('request',(req,res)=>{ //req-->request:请求 res-->response:响应
- res.end('响应给客户端的内容');
- })
分析:客户端一发起请求,就会调用 (req,res)=>{ } 这个函数,然后通过res.end()向客户端响应数据。
注意:同一电脑上可以启动多个服务器,但是每个服务器的端口号不要相同。
- //设置服务器端口,如果服务器启动,执行回调函数(该函数可省略)
- server.listen(8080,()=>{
- console.log('服务器启动成功。。。');
- });
- //总的模板就是这样
- let http = require('http');
- let server = http.createServer();
- server.on('request',(req,res)=>{
- res.end('响应给客户端的内容');
- })
- server.listen(8080,()=>{
- console.log('服务器启动成功。。。');
- });
如果客户端要接收到的是字符串的形式。可以用到 JSON.stringify():把对象转换成JSON型的字符串。
- res.end(JSON.stringify({
- code: 1,
- data: '登录成功'
- }))

01.如果响应给客户端的数据是JSON类型的字符串,为避免中文乱码:
res.writeHead(200, {'Content-Type': 'application/json'});
02.如果响应给客户端的数据是html文件,为避免中文乱码:
res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});

利用req.url == 设置的路由 来判断用户是想请求什么页面,从而返回给客户端什么页面
- server.on('request', (req, res) => {
- if (req.url == '/') {
- res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});
- fs.readFile('./index.html', (err, data) => {
- if (!err) {
- res.end(data);
- }
- });
- } else if (req.url == '/login') {
- res.writeHead(200, {'Content-Type': 'application/json'});
- res.end(JSON.stringify({
- code: 1,
- data: '登录成功'
- }));
- }else{
- res.end('111');
- }
- })
注意:127.0.0.1 / localhost :本地
01.http://127.0.0.1:8080
02.http://localhost:8080
03.http://192.168.12.158:8080
总的代码就是:
- let fs = require('fs');
- let http = require('http');
- let server = http.createServer();
- server.on('request', (req, res) => {
- if (req.url == '/') {
- res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});
- fs.readFile('./index.html', (err, data) => {
- if (!err) {
- res.end(data);
- }
- });
- } else if (req.url == '/login') {
- res.writeHead(200, {'Content-Type': 'application/json'});
- res.end(JSON.stringify({
- code: 1,
- data: '登录成功'
- }));
- }else{
- res.end('111');
- }
- })
- server.listen(8080, () => {
- console.log('服务器启动成功。。。');
- });
npm:node package manager 也叫 node包管理器
npm init -->初始化项目,会产生一个配置文件:package.json
npm install md5 --save 或者 npm i md5 下载md5模块
如果要下载指定版本的:
npm install md5@版本号 --save
npm uninstall 模块 : 卸载某个模块
npm undate 模块:更新某个模块
- let md5 = require('md5');
- console.log(md5('message')); //传什么就对什么进行加密
导出:
- let info = {
- stuname:'花花',
- age:20,
- sayname(){
- return this.stuname;
- }
- }
- module.exports = info;
导入:
- let info = require('./md5.js');
- console.log(info); //{ stuname: '花花', age: 20, sayname: [Function: sayname] }
- console.log(info.sayname());//花花


这两个服务器默认端口号都是 80
注意:
http协议:默认端口号是 80
https协议: 默认端口号是 443
如果用的是默认端口号,浏览器解析的适合会自动把端口号省略掉。
当把上面两个服务器启动一个之后:


也可以访问WWW下的其它文件夹:
