Node.js
- http模块
//1.引入文件
//2.使用api方法
//3.设置port
const http = require("http");
//req:服务请求的信息;res:服务返回的相关信息
http.createServer((req, res) => {
//配置响应头的编码格式
res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"});
//发送响应的数据
res.write("你好!我是Node.js");
//请求完成后结束响应
res.end();
}).listen(8100, "localhost", () => {
console.log("server strat");
});
- url模块(解析路径)
const http = require("http");
const url = require("url");
//req:服务请求的信息;res:服务返回的相关信息
http.createServer((req, res) => {
if (req.url!="/favicon.ico") {
//解析路径及输出路径上的值
let path=url.parse(req.url,true);
let query=path.query;
//配置响应头的编码格式
res.writeHead(200, { "Content-Type": "text/html;charset=utf-8" });
//发送响应的数据
res.write("解析路径传值:"+JSON.stringify(query));
//请求完成后结束响应
res.end();
}
}).listen(8100, "localhost", () => {
console.log("server strat");
});
-
自启动工具supervisor
npm install –g supervisor
安装完成之后启动文件使用 supervisor ****.js
启动服务之后修改代码会自动启动服务 -
自定义模块
- 在nodejs中将公共的功能抽离为单独的js文件作为模块,在外部是没有办法访问的(类似后端的私有的属性和方法);要想使用模块,就必须在模块里面通过exports或者module.exports暴露属性或者方法。在需要的模块使用require引入模块。注:在nodejs中除了http,url,fs等等都是nodejs的内置模块,可以直接使用。
createServer.js:
const http = require("http");
const url = require("url");
//req:服务请求的信息;res:服务返回的相关信息
http.createServer((req, res) => {
if (req.url!="/favicon.ico") {
//解析路径及输出路径上的值
let path=url.parse(req.url,true);
let query=path.query;
//配置响应头的编码格式
res.writeHead(200, { "Content-Type": "text/html;charset=utf-8" });
//发送响应的数据
res.write("解析路径传值:"+JSON.stringify(query));
//请求完成后结束响应
res.end();
}
}).listen(8100, "localhost", () => {
console.log("server strat");
});
//暴露模块
//export default http;
module.exports=http;
server.js:
//请求外部文件(使用相对路径)
//let server=require("./creareServer");
- nodejs 可以自动找node_modules文件下的文件 :如果node_modules文件下有文件夹 可在cd进入这个文件 使用命令npm init –yes 安装当前文件的package.json文件,直接请求require(“名字”);
createServer.js:
const url = require("url");
let stuData=require("../model/getData")
module.exports=(req,res)=>{
if (req.url!="/favicon.ico") {
//解析路径及输出路径上的值
let path=url.parse(req.url,true);
let query=path.query;
//配置响应头的编码格式
res.writeHead(200, { "Content-Type": "text/html;charset=utf-8" });
//发送响应的数据
res.write("解析路径传值:"+JSON.stringify(query));
//请求完成后结束响应
res.end();
}
}
server.js:
const http = require("http");
let server=require("createServer");
//req:服务请求的信息;res:服务返回的相关信息
http.createServer(server).listen(8100, "localhost", () => {
console.log("server strat");
});
- Nodejs的第三方包
第三方包使用建议官网:www.npmjs.com
比如第三方包: md5-node包
安装包:npm install md5-node –save
安装完之后项目里面生成一个node_modules依赖文件
使用:
//使用第三方包
var md5=require('md5-node');
console.log(md5('123456')); //e10adc3949ba59abbe56e057f20f883e
- fs模块文件系统
Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。
- 读取文件
异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。建议大家使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞
const fs=require("fs");
//异步读取
fs.readFile("content.txt",(err,data)=>{
if(err)
{
console.log(err);
return false;
}
console.log(data.toString());
});
//同步读取
const 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);
}
});
//追加文件的写入
let txt="追加文件的写入";
fs.appendFile("content.txt",txt,function (err){
if(err)
{
console.log(err);
}
});
- 读取目录
//读取目录
fs.readdir("upload", (err,files)=>{
if(err)
{
console.log(err);
return false;
}
//打印出当前目录里面的所有目录
console.log(files);
});
- 读取固定目录,判断里面的所有子目录是文件还是文件夹
//读取目录
let filesinfo="upload";
fs.readdir(filesinfo, (err,files)=>{
if(err)
{
console.log(err);
return false;
}
//打印出当前目录里面的所有目录
for(var file in files)
{
//注意这里面的方法为异步执行
fs.stat(filesinfo+"/"+files[file],(error,stat)=>{
if(error)
{
console.log(error);
return false;
}
console.log(files[file],stat.isDirectory()?"是目录":"是文件");
})
}
});
- 静态web服务器
目录结构:
server.js:
const url = require("url");
const fs = require("fs");
const pathmodule = require("path");
let mime = require("./mime.json");
module.exports = (req, res) => {
let path = url.parse(req.url);
let pathname = path.pathname;
if (pathname != "/favicon.ico") {
//加载首页
if (pathname == "/") {
pathname = "index.html";
}
let hname = pathmodule.extname(pathname);
let extname = mime[hname];
res.writeHead(200, { "Content-Type": `${extname};charset=utf-8` });
fs.readFile("static/" + pathname, (err, data) => {
if (err) {
throw err;
}
res.write(data);
res.end();
});
}
}
readType.js:
const fs=require("fs");
module.exports=(callback)=>{
// fs.readFile("model/mime.json",(err,data)=>{
// if(err)
// {
// throw err;
// }
// let json=JSON.parse(data.toString("utf-8"));
// callback(json);
// });
let json=JSON.parse(fs.readFileSync("model/mime.json").toString("utf-8"));
return json;
}
app.js:
const http = require("http");
let server=require("./model/server");
http.createServer(server).listen(8100, "localhost", () => {
console.log("127.0.0.1:8100");
});
static 文件放入静态的资源