node的相关内容

概念:

node是一个用于服务端的js库,支持很多的包(第三方库导入)。类似于Python。Node.js是一个免费的、开源的、跨平台的JavaScript运行时环境,允许开发人员在浏览器之外编写命令行工具和服务器端脚本。

Node.js

Node.Js中文网

环境安装

node环境安装关键词

  • nvm(node version Management)用于node的版本管理
  • nrm(node remote Management)用于node的镜像管理(npm的镜像)
  • npm(用于执行对应的node脚本(缓存))
  • npx(用于快速执行node的脚本(执行后删除))
  • node(用于运行对应的js文件)

nvm的下载(最新版本的node自带nvm)

GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versionsGitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versionsGitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions

选择已经安装的node.js交给对应的nvm管理(next到底)

 检索是否安装

以管理员身份运行cmd

nvm -v

nvm相关指令

 使用nvm安装对应的node

nvm install  版本号    #安装新版本

查看所有的node版本

nvm ls

nvm list    #以列表形式查看 

nvm中node版本的删除

nvm uninstall version    #卸载nvm对应的node版本 

 nvm的版本的切换

nvm use version  #切换对应的node版本

查看当前的node版本

nvm current 

npx快速执行对应的node脚本 

npx在node版本5.2以上内嵌了

node版本5.2以下就需要安装对应的npx

npm i npx -g  #全局安装对应的npx 

nrm node的镜像管理

使用npm来安装对应的nrm

npm install nrm -g    #全局安装对应的nrm

使用nrm指令 

nrm -V     #检索nrm版本

查看对应的镜像

 nrm ls   #以列表形式查看

 nrm list

添加对应的镜像 

nrm add 镜像名  镜像地址

切换镜像 

nrm use 镜像名

查看帮助 

nrm --help

nrm -h

设置镜像源

通过nrm来添加新的镜像源 再切换

nrm add 镜像名 镜像地址

nrm use 镜像名

通过npm配置安装

  • 淘宝源配置

 npm config set registry https://registry.npm.taobao.org

  • cnpm安装

npm install -g cnpm -registry=https://registry.npm.taobao.org

node的常用指令

在vscode中执行对应的指令

打开以管理员身份运行

在终端内执行对应的指令

set-ExecutionPolicy RemoteSigned

 node指令  执行js文件

a.js

console.log('你好')

执行

node  文件名

npm指令用于(管理第三方库)

  • 安装指令 (第三方库需要安装)(产生一个新的文件夹 node-modules 里面包含所有的模板包)

npm i 包名 #如果没有package.json文件自动产生一个package.json文件
npm i #根据package.json去进行下载 读取对应的package.json文件中的dependencies属性进
行下载

  •  删除指令

npm uninstall 包名 #卸载对应的包 从对应的dependencies里面删除对应的包

  •  更新指令

npm unpdate 包名 #获取最新的版本进行更新

  •  展示 (查看)

npm ls
npm list #以列表形式展示

  •  初始化 (产生一个新package.json文件 (整个项目的配置文件))

npm init #初始化模板包

  •  发布

npm

配置对应的用户

npm adduser

进行发布

npm publish

 npm的修饰关键词

-g --global 全局安装
-S --save 保存到本地
-D --develop 工环境

node的生命周期

 模块包

内置模块包 (内置到node环境中)(node官网)

  • fs模块 (fileSystem 文件系统)
  • http (http模块 处理http请求的模块)
  • queryString (处理参数的)
  • path (路径处理)
  • url (url处理)
  • ...

第三方模块包 (需要下载安装)(npm官网)

  • express
  • jsonwebtoken
  • md5
  • ...

入门模块

模块化原则

  • AMD       (异步模块定义  依赖前置  所有的require都被提前执行)
  • CMD      (常规模块定义 依赖就近,想什么时候 require就什么时候加载,实现了懒加载(延迟执行 ))
  • comment.js   (一个纯 JS 实现的静态站点评论系统)
  • require.js    (JavaScript模块加载器)

//导入 关于模块路径如果是node-modules中导入的模块 那么不需要对应的./开头(模块名) 否则需要(路径)
const http = require('模块路径')
//导出 相当于export default
module.exports = 导出的内容

监听的对应服务帮助重启

使用nodemon

npm i nodemon -g

 nodemon 文件名

使用supervisor

npm i supervisor -g

 supervisor 文件名

http模块

构建一个http的服务,通过对应的服务来处理对应的请求。

//导入http模块
const http = require('http')
//调用模块的方法 传入监听请求的处理函数 返回的是一个server对象
const server = http.createServer((req,res)=>{
// console.log('请求的处理')
// console.log(req.url)
// req表示请求对象(get 获取) res表示响应对象 (set 设置)
//解决响应乱码问题 设置对应的响应头
res.setHeader('content-type','text/html;charset=utf-8')
res.write('<b>你好世界</b>')
//响应结束
res.end()
})
//server监听端口 ip地址(默认为localhost)
server.listen('8888','127.0.0.1',()=>{
console.log('server is runnings!!!')
})

简单的路由区分

const {createServer} = require('http');
const {parse} = require('url');
//创建服务
createServer((req,res)=>{
//得到对应的path路径 根据路径不同返回不同的内容
//借助url模块来得到对应的路径
// console.log(parse(req.url).pathname)
//设置响应头
res.setHeader('content-type',"text/html;charset=utf-8")
let router = parse(req.url).pathname
//根据对应的router地址来响应不同的内容
switch(router){
case"/":
    res.write('主页')
    break
case"/user":
    res.write('用户页')
    break
case"/shop":
    res.write('商品页')
    break
default:
    res.write('404')
}
//结束响应
res.end()
}).listen('9999',()=>{
console.log('server is running at localhost:9999');
})

登录接口

const {createServer} = require('http');
const {parse} = require('url');
const {decode} = require('querystring')
//用户数据
const users = [
{
id:1,
username:'jack',
password:'123456'
},
{
id:2,
username:'tom',
password:'123456'
}
]
//创建服务
createServer((req,res)=>{
//设置响应头
res.setHeader('content-type',"application/json;charset=utf-8")
let router = parse(req.url).pathname
//获取url中的数据
// let parame = parse(req.url).query
//?username=111&password=22
// console.log(parame)
// console.log(decode(parame))
// console.log(getQueryParame(parame))
//根据对应的router地址来响应不同的内容
switch(router){
case
"/login":
//必须为get请求
if(req.method.toLowerCase() == 'get'){
//登录操作
//获取对应的数据
let parame = decode(parse(req.url).query)
console.log(parame)
//遍历对应的user数组判断是否存在
let isExis = users.some(({username,password})=>{
return username == parame.username && password == parame.password
})
if(isExis){
res.write(JSON.stringify({
code:200,
message:'登录成功',
data:{}
}))
}else{
res.write(JSON.stringify({
code:200,
message:'登录失败',
data:{}
}))
}
}
break
default:
res.write('404')
}
//结束响应
res.end()
}).listen('9999',()=>{
console.log('server is running at localhost:9999');
})
//获取对应get的参数对象
function getQueryParame(url){
if(!url){
return null
}
//截取问号
url = url.split('?')[1]
//利用&符号来进行截取
let arr = url.split('&')
//返回的参数对象
let parame = {}
//遍历数组
arr.forEach(str => {
parame[str.split('=')[0]] = str.split('=')[1]
});
return parame
}

实现post请求的登录注册

//通过请求体来获取 发送数据是分段
const {
createServer
} = require('http')
const {
parse
} = require('url')
const {
decode
} = require('querystring')
//用户数据
const users = [
{
id:1,
username:'jack',
password:'123456'
},
{
id:2,
username:'tom',
password:'123456'
}
]
//创建服务
const server = createServer()
//监听请求 (请求发送会触发对应的请求事件)
server.on('request', (req, res) => {
//设置响应头
res.setHeader('content-type', 'application/json;charset=utf-8')
//获取路由
let router = parse(req.url).pathname
//post请求获取数据 数据分段传递
let data = ""
req.on('data', (chunk) => {
data += chunk
})
// 监听请求结束
req.on('end', () => {
//判断登录注册
if (router == '/login' && req.method.toLowerCase() == 'post') {
//接收数据
let parame = decode(data)
//判断对应的用户名及密码
//遍历对应的user数组判断是否存在
let isExis = users.some(({username,password})=>{
return username == parame.username && password == parame.password
})
if(isExis){
res.write(JSON.stringify({
code:200,
message:'登录成功',
data:{}
}))
}else{
res.write(JSON.stringify({
code:200,
message:'登录失败',
data:{}
}))
}
} else if (router == '/register' && req.method.toLowerCase() == 'post') {
//接收数据
let {username,password} = decode(data)
//判断用户是否存在
//遍历对应的user数组判断是否存在
let isUserNameExis = users.some((v)=>{
return v.username == username
})
if(isUserNameExis){
res.write(JSON.stringify({
code:200,
message:'当前用户已存在',
data:{}
}))
}else{
//将新的数据加到对应的users里面
users.push({
id:Date.now(),
username,
password
})
res.write(JSON.stringify({
code:200,
message:'注册成功',
data:{}
}))
}
}
res.end()
})
})
//服务监听
server.listen('9999', () => {
console.log('server is running at localhost:9999');
})

总结

  • http模块中获取get请求传递的参数通过query来获取
  • querystring可以将对应的参数字符串变成一个对象
  • url模块用于读取对应的url的内容
  • http模块中获取post请求传递(body)的参数通过监听data的事件(在内容进行拼接得到 分段传递)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值