模块作用域
// 当前文件所在目录
console.log('dirnmae='+__dirname);
// 文件地址
console.log('filename'+__filename);
node模块
//1.process模块
// 操作系统信息
console.log(process.arch);
// 数组 第一个值代表的是node安装地址
//第二个值当前文件地址
console.log(process.argv);
//2.os 模块
const os=require("os");
console.log("hello"+os.EOL + "itcast");//换行
console.log("主机名:"+os.hostname());
console.log("操作系统名"+os.type());
console.log("操作系统平台"+os.platform());
console.log("内存总量"+os.totalmem()+"字节")
console.log("空闲内存"+os.freemem()+"字节");
//3.path 模块
const path=require('path');
// path.extname得到的是文件后缀
console.log(path.extname(__filename));
// 如果是一个目录,没有后缀。
console.log(path.extname(__dirname));
// path.dirname获取的是当前文件所在的目录
var paths="E:/download/data/db";
console.log(path.dirname(paths));//获取到当前文件
console.log(path.basename(paths));//获取最后一层
console.log(path.dirname(paths));//获取上一层
// 解析地址,把字符串转化为对象
console.log(path.parse(__filename))
var parse=path.parse(__filename);
// format解析地址 把对象转化为字符串
var format=path.format(parse);
console.log(format);
// path.join()拼接路径并且自动解析
// ..向上一级
console.log(path.join(__dirname,'my','txt','..','..'));
//当前目录加上my 加上txt然后返回上级 ,放回上级
// path.relative(from,to)从第一个路径如何找到第二个路径
console.log(path.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb'))
//4.fs
const fs=require('fs');
const path=require('path');
// 创建文件夹 在当前文件目录下创建文件
fs.mkdir(path.join(__dirname,'my'),(err)=>{
if(err) throw err;
console.log('文件夹创建成功')
})
// 删除文件夹 删除当前文件目录下的my文件
fs.rmdir(('./my'),(err)=>{
if(err) throw err;
})
// 读文件夹/目录 fs.readdir(文件地址,成功以后的回掉函数)
fs.readdir(__dirname,(err,files)=>{
if(err) throw err;
console.log(files);
})
// 检测文件状态,检测文件是目录还是文件。
// fs.stat(文件地址,(err,stats)=>{判断状态})
fs.stat(__filename,(err,stats)=>{
// stats.isDirectory()检测是否是文件夹 true/false
// stats.isFile()检测是否是文件 true/false
console.log(stats.isDirectory());
})
// 读取当前目录,判断当前目录下每一个文件的状态。
fs.readdir(__dirname,(err,files)=>{
if(err) throw err;
console.log(files)
files.forEach((item,index)=>{
fs.stat(path.join(__dirname,item),(err,stats)=>{
if(stats.isDirectory()){
console.log(item+'是一个目录')
}else{
console.log(item+'是一个文件夹')
}
})
})
})
// 写文件 fs.writeFile('文件名字',数据,(err)=>{})
fs.writeFile('my.txt','hello',(err)=>{
if(err) throw err;
})
// 删除文件 fs.unlink('文件名字',(err)=>{})
fs.unlink('my.txt',(err)=>{
if(err) throw err;
})
//5 http
// 引入模块
const http=require('http');
// 创建服务器
let server=http.createServer((req,res)=>{
res.end('404');
})
//监听端口号 端口号可以任意设置,只要不冲突
server.listen('8989')
在网页上读取项目
const http=require('http');
const fs=require('fs');
const path=require('path');
let server=http.createServer((req,res)=>{
if(req.url=='/favicon.ico') return;
console.log(req.url);
// a.startsWisth('b')检测a是否以b字符串开始
// www一般放置的是静态资源 文件的首页需要是index
// 刚开始输入路径的时候,需要输入全称 music/index.html
if(req.url.startsWith('/music')){
fs.readFile(path.join(__dirname,'www',req.url),(err,data)=>{
if(err) throw err;
res.end(data);//data 返回的数据
})
}else if(req.url.startsWith('/login')){
fs.readFile(path.join(__dirname,'www',req.url),(err,data)=>{
if(err) throw err;
res.end(data)
})
}else{
res.end('404')
}
})
server.listen('8989');
通过ajax 在网页上获取数据
get请求/post请求
const http=require('http');
const fs=require('fs');
const path=require('path');
const querystring=require('querystring')
const url=require('url')
let server=http.createServer((req,res)=>{
if(req.url=='/favicon.ico') return;
if(req.url.startsWith('/login')){
fs.readFile(path.join(__dirname,'www',req.url),(err,data)=>{
if(err) throw err;
res.end(data)
})
}else if(req.url.startsWith('/submit')){
//get 请求
if(url.parse(req.url,true).query.user){
let user=url.parse(req.url,true).query.user;
let password=url.parse(req.url,true).query.password;
res.end(`user is ${user} password is${password}`)
}else{
// post请求的数据是一段段发送的
var allData='';
// data相当于是一个事件 监听客户端发送过来的数据
// post请求发送过来的数据是一段一段的
req.on('data',(chunk)=>{
console.log(chunk.toString());
// chunk代表的是前端发送过来的数据
allData+=chunk
})
// end是一个事件,代表数据接收完毕
req.on('end',()=>{
// allData得到的数据是k=v&k=v的形式 使用querystring转化
// querystring可以把类似k=v&k=v转化为对象的形式
console.log(querystring.parse(allData))
res.end(allData)
})
}
}else if(req.url.startsWith('/music')){
fs.readFile(path.join(__dirname,'www',req.url),(err,data)=>{
if(err) throw err;
res.end(data)
})
}
else{
res.end('404')
}
})
server.listen('8989');
express 模块
文件新建好后
第一步初始化 npm init -y
第二步: 下载express npm install express -S
// 第一步:引入框架
const express =require('express');
// 创建服务器
const app =express();
// 路径以login开始即可
app.use('/login',(req,res,next)=>{
// res.send('login');
console.log('login');
// 如果没有next 前台结束不了响应
// next中间件 有了next以后,代码可以继续往下执行
// send和next在一个响应里面不要同时存在
// next()
res.send('jldsjfljd')
})
// 处理以/开始的路由 处理/的路由一般放置在最后面
app.use('/',(req,res)=>{
// express里面,结束响应使用的是send,执行完以后不再往下执行代码,结束前端响应
// send需要字符串,如果书写其余参数,会有警告前端响应不了。
res.send('123');
})
// 添加监听端口号
app.listen('8989')
1.readfile
const express=require('express');
const app=express();
// 会去www目录下找到music文件夹,把music文件夹内部的index.html作为主页面
// 读取静态资源的时候,路由必须是/
// express.static('读取静态资源的路径')
// 前端路径要完全匹配。才可以执行代码
app.use('/',express.static('./www/music'));
// 路径必须是login才可以
app.use('/login',express.static('./www/login'));
app.use('/',(req,res)=>{
res.send('您输入的路径不存在,请检查路径');
})
app.listen('8989');
get和post
const express=require('express');
const app=express();
// 处理post参数的模块
const bodyParser=require('body-parser');
var urlencodedParser = bodyParser.urlencoded({ extended: false })
app.use('/',express.static('./www/login'))
// app.post()专门用来处理post请求
app.post('/submit',urlencodedParser,(req,res)=>{
// req.body获取的是post请求的参数
console.log(req.body);
res.send(req.body.user);
})
// 处理get请求
app.get('/submit',(req,res)=>{
// get请求的参数在url内部 req.query获取get请求参数
console.log(req.query);
res.send(`您输入的用户名是${req.query.user}`)
})
app.listen('8989','xxx.xxx.x.xxx');
//在此处输入自己电脑ip地址
// http://xxx.xxx.x.xxx:8989/
//就能以自己电脑为服务器访问
//这个网址也可以以在手机上访问
post请求
post请求需要依赖专门的模块
第一步:下载模块 npm install body-parser -S
第二步:在页面中引入
const bodyParser=require(‘body-parser’);
var urlencodedParser = bodyParser.urlencoded({ extended: false })
第三步:在post请求的第二个参数书写urlencodedParser刚刚解析得到的参数
具体看上面的代码