Node.js Day1
课程日期:2019年11月16日
课程内容
一、Node.js创建第一个应用
- 创建http服务器
/**
* Created by Administrator on 2019/3/20 0020.
*/
/*
* 1.引入http请求
*
* 2.创建http服务器
* 参数1,request 获取url信息
参数2,response 浏览器返回响应信息
* */
var http=require('http');
http.createServer(function (req,res){
// 设置http头部 状态 文件类型 字符集
res.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
//发送响应数据
res.write("我是node js");
//设置监听的端口号
//请求完成之后结束响应
res.end();
}).listen(8100);
console.log("http://192.168.0.253:8100");
- url模块
/*
url 模块
引入url 模块
var url=require('url');
方法:
url.parse() 解析url地址
*/
var url=require('url');
var src='http://www.baidu.com?name=maodou&sex=0';
//解析地址
//参数1位解析的路径 参数2:可以将地址上的值解析出来
var path=url.parse(src,true);
console.log(path);
- 使用http模块+url模块解析路径上的值
var http=require("http");
var url=require("url");
http.createServer(function (req,res){
res.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
//解析路径输出路径上的值
var path=url.parse(req.url,true);
res.write(path.query.id);
res.end();
}).listen(8100);
- 安装supervisor自启动工具
在命令行中输入
cnpm install –g supervisor --save
安装完成后即可使用supervisor启动文件
supervisor ****.js
二、Commonjs nodejs中的自定义模块
Commonjs规范的提出,弥补javascript没有标准的缺陷,提供一个类似后端语言的标准库
也就是说commonjs是模块化的标准,nodejs就是commonjs模块化的实现
在nodejs中除了http,url,fs等等都是nodejs的内置模块,可以直接使用
commonjs中自定义模块的实现:
在nodejs中将公共的功能抽离为单独的js文件作为模块,在外部是没有办法访问的(类似后端的私有的属性和方法);要想使用模块,就必须在模块里面通过exports或者module.exports暴露属性或者方法。在需要的模块使用require引入模块。
Server.js
var http=require('http');
var ser=http.createServer(function (req,res){
// 设置http头部 状态 文件类型 字符集
res.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
//发送响应数据
res.write("我是node js");
//设置监听的端口号
//请求完成之后结束响应
res.end();
}).listen(8100);
console.log("http://192.168.0.253:8100");
//两种方式导出都可以
// exports.ser=ser;//导出模块
module.exports=ser;
common.js
/*
在js文件里面引入Server.js模块文件
*/
var server=require("./Server.js");//在当前的目录里面找文件 也可以省略.js后缀
todo.js
var stu={
name:"HHD",
setwork:function (){
return "我在跑nodejs"
}
}
module.exports=stu;
common2.js
var s=require("./todo");
console.log(s.name);
console.log(s.setwork());
list.js
var stu={
name:"HHD",
setwork:function (){
return "我在跑nodejs"
}
}
module.exports=stu;
common3.js
var s=require("./node_Module/list");
console.log(s);
三、nodejs第三方包的安装
创建 node项目之后先使用命令进入项目文件,安装项目的配置文件package.json文件。
具体方法是:
使用命令
cnpm init
或者
cnpm init –yes
(这种表示严格模式命名)
Nodejs的第三方包的使用:
官网是www.npmjs.com
比如安装md5加密第三方包: md5-node包
安装方法:
npm install md5-node –save
使用方法:
var md5=require('md5-node');
console.log(md5('123456')); //e10adc3949ba59abbe56e057f20f883e
四、nodejs中fs模块(文件系统)的使用
读取文件:
var fs=require("fs");
// Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,
// 例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。
// 异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。
// 建议大家使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞
//异步读取
fs.readFile("content.txt",function (err,data){
if(err)
{
console.log(err);
return false;
}
console.log(data.toString());
});
//同步读取
var data=fs.readFileSync("content.txt");
console.log(data.toString());
获取文件信息 判断是否是目录还是文件:
//读取文件信息
fs.stat("content.txt",function (err,stat){
if(err)
{
console.log(err);
return false;
}
console.log("是否为文件"+stat.isFile());
console.log("是否为目录"+stat.isDirectory());
});
文件的写入 有覆盖 和追加
//异步写入文件 这种文件的写入会覆盖
fs.writeFile("content.txt","我在测试写入文件",function (err){
if(err)
{
console.log(err);
}
});
//追加文件的写入
var txt="追加文件的写入";
fs.appendFile("content.txt",txt,function (err){
if(err)
{
console.log(err);
}
});
创建目录
//创建目录 如果目录已经存在不在创建 一般用于图片的上传与下载上
fs.mkdir("./upload",function (err){
if(err)
{
console.log(err);
return false;
}
console.log("创建upload目录成功!");
});
读取目录:
//读取目录
fs.readdir("upload",function (err,files){
if(err)
{
console.log(err);
return false;
}
//打印出当前目录里面的所有目录
console.log(files);
});
读取固定目录,判断里面的所有子目录是文件还是文件夹:
//读取目录
var filesinfo="upload";
fs.readdir(filesinfo,function (err,files){
if(err)
{
console.log(err);
return false;
}
//打印出当前目录里面的所有目录
for(var file in files)
{
//注意这里面的方法为异步执行
fs.stat(filesinfo+"/"+files[file],function (error,stat){
if(error)
{
console.log(error);
return false;
}
console.log(files[file],stat.isDirectory()?"是目录":"是文件");
})
}
});
五、创建静态Web服务器
静态Web服务器目录结构
server.js
//导入http模块
var http=require('http');
//导入fs模块
var fs=require("fs");
//导入path模块
var path=require("path");
var url=require("url");
var Exname=require("./Extname.js");
http.createServer(function (req,res){
//在这里可以对路径进行解析 获取pathname 这样可避免get传值之类的
var pathname=url.parse(req.url).pathname;
//把无效的请求过滤
if(pathname!="/favicon.ico")
{
if(pathname=="/")
{
pathname="index.html";//默认
}
//根据目录找到对应的文件
fs.readFile("static/"+pathname,function (error,data){
if(error)
{
console.log("404");
//在页面404时可以请求404页面
return false;
}
//现在数据可以打印出去 但是文件的类型不一致 text/html text/css text/javascript 等等不一致
//根据后缀名 确认类型
var aname=path.extname(pathname);
var exname=Exname(aname);
res.writeHead(200,{"Content-Type":""+exname+";charset=UTF-8"});
res.write(data);
res.end();
});
}
}).listen(8100);
Extname.js
var mim=require("./Mime");
module.exports=function (exname){
return mim[exname];
// var type="";
// switch(exname)
// {
// case ".html": type="text/html";break;
// case ".css": type="text/css";break;
// case ".js": type="text/javascript";break;
// case ".json": type="text/json";break;
// default : type="text/html";break;
// }
// return type;
}
Mime.js
var fs=require("fs");
var data=null;
//读取文件
//异步获取数据暂时外边拿不到
// fs.readFile("mime.json",function (err,res){
// if(err)
// {
// console.log("404");
// return false;
// }
// data=JSON.parse(res.toString());
// });
data=JSON.parse(fs.readFileSync("mime.json").toString());
module.exports=data;
static 文件放入静态的资源