后台服务器,第三方模块

博客围绕后台服务器和第三方模块展开。介绍了创建服务器、解决跨域问题、get和post区别等后台服务器相关内容。还阐述第三方模块概念、获取及使用方法,包括npm操作、nrm源管理器、cnpm、yarn等,以及promise解决回调地狱、js异常捕获等知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

后台服务器

创建服务器

// 引入http模块
const http = require("http");
// 调用http createServer方法创建服务
// 这个方法需要一个回调函数,回调函数中有两个形参
// request 请求信息
// response 响应信息
http.createServer(function(req,res){
  // 如果有请求进来,需要给它响应。 
  res.end("hello node");
  
  // 需要添加端口监听
}).listen(3000);//不推荐更改,因为你不知道每个应用的端口。如果两个程序的端口冲突,则软件运行会出错。
console.log("服务器已经启动");
// ctrl + c 停止服务运行。

解决跨域问题

// 解决跨域问题
// 违反了同源策略时,会出现跨域: 协议,域名,端口三者只要有一个不同就会跨域。
  res.setHeader("Access-Control-Allow-Origin","*");
// 设置页面内容是html,编码格式是utf-8。
  res.setHeader("content-type","text/platin;charset=utf8");
// 获取请求方式: get post
  console.log(req.method);
// 获取请求的url (完整路径中端口后面的部分)
   console.log(req.url);
// 获取请求头
  console.log(req.headers);
write:向响应中添加数据,可以多次调用,但是不能在end后使用
end:结束本次响应,可以传参,参数也可以为空,参数也会被添加到响应中。只能调用一次,后面的end不会有作用。

get 和 post 的区别

1. 语义上的区别
get 获取 从服务器端获取一些数据时使用。
post 发送  向服务器端发送一些数据。

2. 参数
get:参数会以键值对的形式拼接到地址栏中
post:参数会在请求体中,发送到服务端。
参数的大小:
get:4kb左右
post:大小不受浏览器限制,但是可能会被服务器端限制。

3. 安全性
post的安全性更高。

4. 缓存
get:请求会被浏览器缓存
post:请求不会被浏览器缓存

第三方模块

什么是第三方模块?

别人写好的,具有特定功能的模块,就是第三方模块,我们需要下载才可以使用。

获取第三方模块

npmjs.com
存储和分发第三方模块的仓库
使用npm命令行下载第三方模块
npm是随node一起安装的包管理工具,只要安装了node,就可以使用npm。

npm的作用:
1. 允许用户从npm服务器下载别人写好的第三方模块到本地使用。
2. 允许用户从npm服务器下载别人写好的命令行程到本地使用。
3. 允许上传自己写好的第三方模块和命令行程序到npm服务器上。

如何使用第三方模块

npm下载模块

npm install 模块名; 可以简写为 npm  i 模块名;
执行以上命令后,会在当前命令行所在的目录下多一个node_moduls文件夹,下载好的第三方模块就存放在这个文件夹下面。

npm卸载模块

npm uninstall 模块名;

nodemon

nodemon是一个命令行工具,用以辅助项目开发,每次修改文件都会自动重新执行该文件,不需要再手动执行。

全局安装与本地安装

本地安装:把模块和命令行安装到当前文件夹下,只能在当前目录下使用。
第三方包/模块  是安装在本地的

全局安装:安装完成后,在命令行中任意目录都可以使用。
全局安装:在安装模块时,在后面添加 -g
npm i 模块名 -g
命令行工具安装在全局,以便随时随地调用。

解决方法
4. window+r 输入powershell
5. 执行:set-ExecutionPolicy RemoteSigned

使用nrm源管理器

node的服务器是在国外的,下载是非常慢的。
如果想要下载的快,可以使用国内的镜像库。

安装

npm i nrm -g

查看可用的源

nrm ls

切换源

nrm use 地址名称

错误解决方法

1. 根据错误提示,找到cli.js,一般是
C:\Users\Administrator\AppData\Roaming\npm\node_modules\nrm\cli.js
2. 将第17行的数据修改为以下代码:
const NRMRC = path.join(process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'], '.nrmrc');

cnpm

淘宝的镜像源下载命令行工具

node_modules的问题

如果我们在项目中下载了很多第三方模块,那么别人拷贝你的项目时就会特别的慢。
package.json
每个项目的根目录下,一般都会有一个package.json文件,定义了这个项目需要哪些模块,以及该项目的配置信息(项目名,作者,版本,许可证等)

创建package.json文件
npm init    需要填写配置信息。如果不想填写,直接一路回车。
npm init -y 快速生成
package-lock.json 用于锁定版本,防止多人开发时,使用不同的第三方包的版本。
 
package.json重要字段
dependencies    生产环境依赖模块
devDependencies 开发环境依赖模块 
scripts:脚本

一些第三方类库只需要在开发时使用,不需要在生产环境上部署,则可以将它安装在开发环境依赖模块下。
npm install 模块名 -D  开发环境
npm install 模块名 -S  生成环境

初始化配置信息

// 初始化配置信息
    {
      "name": "demo", //项目名称
      "version": "1.0.0", //项目版本
      "description": "", //简介
      "main": "index.js", //入口文件
      //脚本
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "", //作者
      "license": "ISC" //开源许可证
    }

yarn

yarn也是一个包资源管理器,与npm的功能是一样的,不过yarn的下载速度更快。

下载使用

npm i yarn -g;

初始化项目

yran init;
yarn init -y 快速生成

安装单个依赖

yarn add 模块名;

安装项目中所有的依赖

yarn install;

卸载依赖

yarn remove 模块名;

script 脚本设置

"scripts":{
    "key": "value"
}
// key 启动的命令名
// value 指定的命令

模块加载机制

1.模块有路径,并且有后缀
	通过路径,引入相关模块
2. 当模块有路径,但是没有后缀的时候
	a. 会先找路径下同名的js文件
	b. 再找路径下同名的文件夹,找到文件夹的index.js
	c. 如果文件夹下有package.json 会找文件中的main字段 入口文件
	d. 如果找不到就报错
3. 模块没有路径也没有后缀
	a. node会判断它是否为内置模块,是内置就加载
	b. 不为内置, 则去第三方模块中查找,去node_modules中查找。

promise

同步与异步

同步:一次执行一个任务,该任务执行完成后,再执行下一个任务。
异步:一次可以执行多个任务,当前的任务不会阻塞下一个任务的执行。
在js中,异步任务(API)会在所有的同步任务完成后才会执行。
异步函数的返回值问题
同步函数中可以获取返回值。
function fn(){
  return "123"  
}
console.log(fn());  //123
function fnSync(){
  setTimeout(function(){
    console.log("456"); //undefined
    return "456";   //456
  },0)
}
// log是一个同步代码,执行fnSync函数时,遇到setTimeout时,setTimeout不会立即执行, fnSync就没有返回值,默认返回undefined。所以,打印的结果是undefined,打印完成后,js中的所有同步代码都执行完了,才会执行setTimeout函数。

promise

ES6新增的类,专门用来解决回调低地狱问题的
三种状态:
pending:初始值 表示进行中
fulfilled:操作成功
rejected:操作失败
promise是一个对象,所以创建时需要使用new关键字,参数为一个回调函数,回调函数有两个形参:resolve,reject 这两个都是函数。
let p = new promise((resolve,reject)=>{
  // resolve表示异步函数成功执行后的执行的操作
  // reject表示异步函数执行失败后的执行的操作
  
  // 将异步代码写在这里。
  setTimeout(function(){
    if (Math.random()>0.5) {
      // 操作成功了
      resolve()
    }else{
      // 操作失败了
      reject();
    }
  },1000)
})
// Promise支持链式调用。
p.then(()=>{
  console.log("女孩同意了");
}).catch(()=>{
  console.log("你是个好人");
})

使用promise解决回调地狱

function fn(){
  return new Promise((resolve, reject) => {
    setTimeout(function () {
      if (Math.random() > 0.5) {
        resolve();
      } else {
        reject();
      }
    }, 1000)
  })
}
let p1 = fn();
// catch 默认也会返回当前的Promise对象。
// 手动return一个空的Promise对象。
// 如果多次调用catch,建议使用try catch语句进行捕获
p1.catch(()=>{
  console.log("你是个好人");
  return new Promise(()=>{});
}).then(() => {
  console.log("女孩同意了");
  return fn();
})

js异常捕获

try{
     可能出现问题的代码
   }catch(err){
     对错误进行处理
   }finally{
      无论代码是否出错,都会执行。
   }
  
  // 如果try里面的代码块有错误,就会停止执行try里面的语句,而去执行catch中的语句。同时程序不会停止运行。
  
  // try catch 可以增强程序的健壮性。

async

ES7才有的与异步有关的关键字
使用:
添加在普通函数定义前面,让其成为一个异步函数。或者成为async函数。
1. async函数返回的是一个Promise对象。
2. async函数内部return的值,就是then函数中回调函数的参数。
3. async函数内部如果有错误,会执行catch函数,catch函数中的回调函数的参数就是抛出的错误信息。

await 关键字
await关键字只能在async函数中使用。
1. await命令后面一般是一个Promise对象。
2. await命令修饰Promise对象时,是等待该异步函数执行的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值