const http = require('http')
const fs = require('fs')
const url = require('url')
const path = require('path')
let app = http.createServer(function (req, res) {
const { query, pathname } = url.parse(req.url, true)
// 约定:将请求分为两类,静态资源/static以及接口数据api
if (/^(\/static)/.test(pathname)) {
const { base, ext } = path.parse(pathname)
let filePath = './client'
switch (ext) {
case '.html':
filePath += '/views/'
break;
case '.js':
filePath += '/js/'
break;
case '.css':
filePath += '/css/'
break;
}
filePath += base
fs.readFile(filePath, 'UTF-8', (error, data) => {
if (error && ext === '.html') {
fs.readFile('./client/views/404.html', 'UTF-8', (error, data) => {
console.log(data)
res.end(data)
})
return
}
res.end(data)
})
}
if (/^\/api/.test(pathname)) {
/**
* request.method 返回的字符串表明当前的请求方式是什么 'GET'
*/
if (pathname === "/api/goods/list" && req.method === "GET") {
// 1. 拿到用户的参数 (请求的第几页?每页多少条?)
const {current,pagesize} = query
if(!current || !pagesize) {
res.end(JSON.stringify({
code:0,
message:'您当前传递参数不够'
}))
return
}
// 2. 根据用户的参数, 去数据库中拿到对应的数据
let list = [
{ id: 1, name: "商品1" },
{ id: 2, name: "商品2" },
{ id: 3, name: "商品3" },
{ id: 4, name: "商品4" },
{ id: 5, name: "商品5" },
{ id: 6, name: "商品6" },
{ id: 7, name: "商品7" },
{ id: 8, name: "商品8" },
{ id: 9, name: "商品9" },
{ id: 10, name: "商品10" },
{ id: 11, name: "商品11" },
{ id: 12, name: "商品12" },
];
list = list.slice((current - 1) * pagesize,current*pagesize)
// 3. 返回给请求者
res.end(
JSON.stringify({
code: 1,
message: "请求 商品列表成功",
list,
})
);
}
// * request.on('data', () => {}) 请求体内有数据的时候就会执行, 什么时候结束 我们没有办法知道
// * request.on('end', () => {}) 请求体内的数据全部加载完毕后执行
if(pathname === '/api/user/login' && req.method === 'POST'){
let str = ''
req.on('data',(chunk)=>{ //
str += chunk
})
req.on('end',()=>{
let params = ""
if(req.headers['content-type'] === "application/x-www-form-urlencoded"){
params = url.parse('?' + str,true).query
} else {
params = JSON.parse(str)
}
const {username,password} = params
res.end(JSON.stringify({
code:1,
info:{
username,
password
}
}))
})
}
}
})
app.listen(1245, () => {
console.log('开启服务器成功')
})
1. npm
-
作用:类似于一个腾讯电脑管家,可利用npm安装一些所谓的'软件'(也就是JS相关的东西)
-
核心意义:npm其实就是一个基于node环境的包管理器
-
npm的安装跟随安装node.js就会随之安装上
-
npm的检查终端指令:npm --version/npm -v
-
作用:其实就是帮我们安装一些JS相关的第三方模块,所以就相当于一个软件管家,帮我们安装一些软件,只不过这个所谓的软件管家没有可视化模图形,所有的操作都必须依赖于命令行
-
npm在安装时需要在一个网络环境良好的情况下安装否则可能会出现安装一半卡着不动或者安装完成无法使用
-
npm的使用:必须先在根目录初始化(npm init)注意项目目录名不要有汉字,然后再使用,配置完成后会在根目录生成一个package.json文件,极其重要,因为这个文件内会帮我们记录你下载的第三方模块以及对应的版本 * package name:输入一个项目名,默认为当前目录名 * version:表示当前项目的初始版本(可能会用0.0.1或0.1.0版本) * description:关于当前项的描述,写完这个项目后有可能上传到npm仓库,这个描述是给浏览这个仓库人看的 * entry point:项目的入口(或者出口)默认值()内东西,别人引入项目拿到的文件
-
第二个命令可以帮助我们更加便捷的初始化,npm init -y 代表所有的配置项全都按照默认值处理
2. npm指令
-
npm下载第三方包 * 当前所有指令都是基于已经完成过npm init的所有步骤的 * npm install 第三方模块的模块名 * npm i 第三方模块的模块名
-
输入完命令后package.json会同步记录安装的包的名字并且会记录对应的版本号同时package.json所在的文件目录会多出一个package-lock.json 文件,此时会详细记录了包的来源跟版本号还有多出一个node_modules的文件夹,这个文件夹内存放的就是你安装的第三方模块
-
npm查看第三方包所有可下载版本 * 终端路径无所谓,输入一个命令npm view 包名 versions * 输入完命令后,终端会输出一个数组,数组内就是当前包可以下载版本
-
npm下载指定版本的第三方包 * npm i 包名@版本号 * 后续安装的第三方包如果之前安装过,后续安装的会将之前安装的完全覆盖掉,同时package.json中的记录也会更改
-
npm删除某一个第三方包 * npm uninstall 包名 * npm un 包名
-
统一下载package.json中的包 * 找到json文件在集成终端中打开,输入npm i
-
npm清除缓存 * 网络缓存:npm cache clear -f * 本地缓存:C/用户/电脑用户名的文件夹/AppData(隐藏目录)/Roaming/npm-cache,删除这个文件夹就可以
-
npm切换淘宝源 * npm config set registry registry.npmmirror.com/
-
npm切换公司源