nodeJS命令
卸载全局安装模块 npm uninstall -g
查看所有全局安装的模块 npm ls -g
查看npm默认设置(部分) npm config ls
查看npm默认设置(全部) npm config ls -l
如图,可以看出全局模块默认安装在prefix目录下 C:\Users\ZjuTH\AppData\Roaming \npm
那么如何修改该路径呢?
使用命令 npm config set prefix “D:\Program Files\npm_global_modules\node_modules”
nodejs开发
概念
- 服务端开发
- 实现网站的业务逻辑
- 数据的增删改查
- nodejs
- nodejs是基于chrome V8 引擎的 javascript 代码运行环境
- 组成部分
- nodejs组成部分: ECMAScript + node模块api
node模块化开发
- nodejs组成部分: ECMAScript + node模块api
传统的js开发存在弊端
-
文件依赖不明确
-
命名冲突
nodejs模块化开发 -
nodejs规定一个js文件就是一个模块,模块内部定义的变量金额函数默认情况下外部无法得到
-
模块内部可以使用exports/module.exports导出对象成员,使用require导入对象成员
nodejs模块的导出和导入 -
module.exports导出模块
-
require 导入模块
node系统模块
文件模块(fs)
- 读取文件 fs.readFile
- 写入文件 fs.writeFile (有内容会进行替换)
- 文件中追加内容 fs.appendFile (不会覆盖之前的内容)
- 检测是文件还是目录 fs.stat
- 创建目录 fs.mkdir
- 读取文件流
- 文件流的方式写入文件
- 管道流 —- 从一个流中读取数据, 在写入另一个流中,用于复制大文件
node常用第三方模块
path模块
用于拼接路径
因为不同的操作系统分隔符不统一 使用path模块可以自动识别
path.join("itcast", "a", "b") **=> 路径 itcast/a/b
path.join(__dirname, "a.txt") **=>__dirname 意思为当前位置的绝对路径
mime模块
用于识别文件格式
mime.getType("xxxxxxxxxxx") // 原生node进行静态资源托管的时候识别文件类型
请求参数获取
get请求参数
参数为application/x-www-form-urlencoded格式 参数只能是application/x-www-form-urlencoded格式
//请求地址 http://localhost:3000/?username=123 x-www-form-urlencoded格式
const http = require("http")
const url = require("url")
const app = http.createServer()
app.on("request", (req, res) => {
const { query } = url.parse(req.url, true)
console.log(`get参数: ${query.username}`); // 获取get参数username
res.end("ok")
})
app.listen(3000)
post请求参数
form表单提交默认为application/x-www-form-urlencoded格式 参数可以为application/x-www-form-urlencoded、application/json、multipart/form-data(主要用于文件上传)三种格式
## post传递x-www-form-urlencoded格式的参数
const http = require("http")
const url = require("url")
const path = require("path")
const fs = require("fs")
const mime = require("mime")
const queryString = require("querystring")
const app = http.createServer()
app.on("request", (req, res) => {
let { pathname } = url.parse(req.url, true)
let realPath = path.join(__dirname, "public" + pathname)
let fileType = mime.getType(realPath)
let data = ""
if(pathname **= "/login") {
// post参数以流的形式传输 每次传输都会触发data事件
req.on("data", (paramsUrl) => {
data = data + paramsUrl
})
// 参数传输完毕触发end事件
req.on("end", () => {
let { username, password } = queryString.parse(data)
//使用queryString模块可以将参数转化为对象的形式
console.log("参数username:", username);
console.log("参数password:", password);
})
res.end("ok")
} else {
fs.readFile(realPath, (err, doc) => {
if(!err) {
res.writeHead(200, {
"content-type": fileType
})
res.end(doc)
}
})
}
})
app.listen(3000)
// post传递json格式的参数
const http = require("http")
const url = require("url")
const path = require("path")
const fs = require("fs")
const mime = require("mime")
const queryString = require("querystring")
const app = http.createServer()
app.on("request", (req, res) => {
let { pathname } = url.parse(req.url, true)
let realPath = path.join(__dirname, "public" + pathname)
let fileType = mime.getType(realPath)
let data = ""
if(pathname **= "/login") {
req.on("data", (paramsUrl) => {
data = data + paramsUrl
})
req.on("end", () => {
console.log("json参数", JSON.parse(data));
// 传参会默认将参数转化为字符串格式, 使用JSON.parse()将json字符串转化为json对象
})
res.end("ok")
} else {
fs.readFile(realPath, (err, doc) => {
if(!err) {
res.writeHead(200, {
"content-type": fileType
})
res.end(doc)
}
})
}
})
app.listen(3000)
原生node静态资源托管
- 原生代码
- 封装静态网站服务器
// 在static.js文件中
const mime = require("mime")
const fs = require("fs")
const url = require("url")
const path = require("path")
const static = (req, res, reqUrl) => {
let handlePath= url.parse(reqUrl).pathname
handlePath = handlePath **= "/" ? "/index.html": handlePath
let realPath = path.join(__dirname, "static"+handlePath)
const fileType = mime.getType(realPath)
fs.readFile(realPath, (err, doc) => {
if(!err) {
res.writeHead(200, {
"content-type": fileType
})
res.end(doc)
}
})
}
module.exports = {
static
}
// 在app.js中
const http = require("http")
const { static } = require("./static")
const app = http.createServer()
app.on("request",(req, res) => {
static(req, res, req.url)
})
app.listen(3000)