@TOC
1.手写http服务器
1.在webstorm里面启动就可以在chrome浏览器里面查看了。
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200, {"Content-type": "text/html;charset='utf-8'"});
res.write("<head>\n" +
" <meta charset=\"UTF-8\">\n" +
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n" +
" <title>Document</title>\n" +
"</head>")
res.write("<h1>hello world</h1>")
res.write("<h2>I love Javascript</h2>")
res.end("我爱学习,学习爱我!")
}).listen(8989)
2.热部署
这样就可以ctrl+s热部署启动了。
npm install -g supervisor #-g代表全局安装
supervisor xxx.js #xxx代表要启动的文件
3.引入自己写的js文件。
区别:引入方式的区别。
#demo.js 第一种方法
const http = require('http');
function webServer() {
http.createServer((req, res) => {
res.writeHead(200, {"Content-type": "text/html;charset='utf-8'"});
res.write("<h1>hello world</h1>")
res.end("我爱学习,学习爱我!")
}).listen(8989)
}
exports.webServer = webServer;
#demo.js 第二种方法
const http = require('http');
var obj = {
webServer:function () {
http.createServer((req, res) => {
res.writeHead(200, {"Content-type": "text/html;charset='utf-8'"});
res.write("<h1>hello world</h1>")
res.end("我爱学习,学习爱我!")
}).listen(8989)
}
}
module.exports = obj;
#demo.js第三种方法
exports.webServer = function(){
http.createServer((req,res)=>{
res.write()
res.write("hello world")
}).listen(8989);
}
#demo1.js
const demo = require("./demo.js")
demo.webServer();
supervisor demo1.js #运行文件
关于commentjs
commentjs是一种模块化的标准,nodejs就是commonJS的实现。
node下面有两类模块,一类是系统提供的,(http,fs等)一类是用户自己编写的。
1.常用的指令
https://www.npmjs.com/ 可以搜索到需要的包
package.json:包描述的文件
bin:用于存放二进制可执行的文件
lib:用于存放javascript代码的目录
doc:用于存放文档的目录
npm i #当有package-lock.json时候,可以找到里面的dependences里面依赖的包,自动安装node_modules
npm list #当前环境下的所有包
npm info XXX #输出XXX包的信息
npm install XXX@2.2.3 --save #安装XXX指定版本的包
2.package.json文件
npm init #生成package.json
{
"name": "ossDownload",#名字
"version": "1.0.0",#版本
"description": "",#描述
"main": "index.js",#程序入口
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",#作者
"license": "ISC",
"dependencies": {
"MD5": "^1.3.0",
"ali-oss": "^6.5.1",
"moment": "^2.24.0",
"mysql": "^2.18.1",
"md5": "latest"
}#项目需要的依赖信息
}
# ^ 主版本不变,后两位更新
fs模块的介绍。
这是nodejs中用于和文件系统交互的模块。
const fs = require("fs")
fs.stat() #检查是文件还是目录
fs.mkdir() #创建目录
fs.writeFile() #创建写入文件
fs.appendFile() #追加文件
fs.readFile() #读取文件
fs.readdir() #读取目录
fs.rename() #重命名
fs.rmdir() #删除目录
fs.unlink() #删除文件
简单源码解析
/** path 是一个str,为需要创建的目录
data 是一个str|buffer,为需要写入的字符串
options 是一个数组,包含['编码','读写权限,默认num类型为438','以写入方式默认打开w']
callback,是一个回调函数,由下面callback(openErr)可以知道只有一个参数,为写入错误时候回调
*/
function writeFile(path, data, options, callback) {
callback = maybeCallback(callback || options); /*可以在options地方写回调*/
options = getOptions(options, { encoding: 'utf8', mode: 0o666, flag: 'w' });
const flag = options.flag || 'w';
if (isFd(path)) {/*路径判断*/
writeFd(path, true);
return;
}
fs.open(path, flag, options.mode, (openErr, fd) => {/*打开文件*/
if (openErr) {
callback(openErr);/*调用回调*/
} else {
writeFd(fd, false);
}
});
function writeFd(fd, isUserFd) {
const buffer = isArrayBufferView(data) ?
data : Buffer.from('' + data, options.encoding || 'utf8');
const position = (/a/.test(flag) || isUserFd) ? null : 0;
writeAll(fd, isUserFd, buffer, 0, buffer.byteLength, position, callback);/*写入buffer内容*/
}
}