博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nodejs 了解web服务器
阅读量:2054 次
发布时间:2019-04-28

本文共 5115 字,大约阅读时间需要 17 分钟。

一台电脑他可以部署很多个服务器

  • apache软件部署的服务器
  • 我们自己用http模块搭建的服务器
  • mysq|数据库服务器

那我们通过ip地址(本地回环地址127.0.0.1/localhost)找到这个电脑了通过端口来区分不同的服务器.

注意:

  • 默认的http端口是80端口,所以apache配置这个web服务器用的就是这个默认的80端口.
  • 默认的80端口可以省略不写.
  • 自己写的服务器端口也不要乱写,很多端口已经被其他的服务给占用了.

web服务器读取网页返回给用户

// 1. 导入模块const fs = require("fs");const http = require("http");const path = require("path");// 2. 创建web服务器const server = http.createServer((request, response) => {
// 3. 读文件返回 // 3.1 拼接妖谱读取的文件路径 const fullPath = path.join(__dirname, "web", "index.html"); // 3.2 读取这个文件的内容 fs.readFile(fullPath, "utf-8", (err, data) => {
if (err == null) {
response.end(data); } else {
console.log("404"); } });});// 4. 开启服务器server.listen(4399, () => {
console.log("success");});

staticServer

在这里插入图片描述

// 1. 导入模块const fs = require("fs");const http = require("http");const path = require("path");// 2. 创建服务器const server = http.createServer((request, response) => {
// 3. 设置返回给用户的内容 // 3.1 首先你要知道用户请求的是那样一个页面(哪一个资源) console.log(request.url); // response.end("666"); // 3.2 拼接要读取文件的路径 const fullPath = path.join(__dirname, "web", request.url); // 3.3 读取这个文件 // 服务器会有一个嗅探功能 // 它根据你请求的资源名字,能够知道你请求的什么类型的资源 // 知道了什么类型的资源后,就可以根据这种类型的资源返回内容 fs.readFile(fullPath, (err, data) => {
if (err == null) {
response.end(data); } else {
console.log("404"); } });});// 开启服务器server.listen(4399, () => {
console.log("服务器开启了...");});

nodejs接收get传递过来的参数

前端传参

  • get传参:拼接在url上面

    http://127.0.0.1:4399/joke?id=8&username=admin

  • post传参:不是拼接在url上面

    请求体中传递

const fs = require("fs");const path = require("path");const http = require("http");const url = require("url");const server = http.createServer((req, res) => {
// console.log(req.url); // /?id=8&username=admin // 我们可以通过req.url拿到前端传递过来的参数 // 但是要做字符串处理 // 我们可以使用node.js的一个模块:url模块 // 调用它的parse方法 // 第一个参数:就是要处理的url // 第二个参数:如果给true的话就返回一个对象 let urlObj = url.parse(req.url, true); // console.log(urlObj); // 这个返回的对象里面有一个query属性,它也是一个对象,这个属性里面就youget传递过来的参数 console.log(urlObj.query); // 那就可以在这里根据这个接收到的id,去数据库中获取这个id的英雄的所有详细信息 // 返回给调用者 // 如果在这里拿到了id对应的英雄的详细信息了,就可以返回, res.end(JSON.stringify(urlObj.query)); // 只能返回字符});server.listen(4399, () => {
console.log("服务器开启了...");});

nodejs接收post传递过来的参数

在这里插入图片描述

const http = require("http");const querystring = require("querystring");const server = http.createServer((req, res) => {
// req是请求对象 // 因为这里是post的方式传递过来的参数,不是在url中的,所以用req.url是拿不到的 // console.log(req.url) // 那如何拿呢? // 一小块一小块的拿 // 1. 你得有一个容器 let postData = ""; // 2. 给req对象一个data事件 // 事件处理程序,参数是当前这次传递过来的这一小块内容 req.on("data", (chunk) => {
postData += chunk; }); // 3. 给req对象一个end事件 // 表示数据传递完毕了 req.on("end", () => {
// 打印看看 // console.log(postData); // username=admin&password=123456 // 4. 解析这个传递过来的参数数据 let postObj = querystring.parse(postData); console.log(postObj); // { username: 'admin', password: '123456' } // 5. //那在这里就可以根据这个传递过来的账号和密码,去数据库中判断是否是正确的 //如果正确的那在这里就可以告诉用户,账号密码正确 res.end("sb"); });});server.listen(4399, () => {
console.log("服务器开启了...");});

第三方模块的使用

    1. 新建一个文件夹,文件夹名字非中文,名字也不要和模块名字一样
    2. npm init -y 初始化
    3. 下载模块,去npm官网搜索模块,用他的说明来下
    4. 使用模块,去模块的官网,或者模块说明中使用
var Crawler = require("crawler");var fs = require("fs");var c = new Crawler({
encoding: null, jQuery: false, // set false to suppress warning message. callback: function (err, res, done) {
if (err) {
console.error(err.stack); } else {
fs.createWriteStream(res.options.filename).write(res.body); } done(); },});// 爬取数据//爬一个b站中的视频//不是什么样的数据都可以爬下来,有些网站做了反爬//反爬的机制:// 看你这个请求是不是服务器,如果是就不给你数据// 我们这里是node.js是服务端,有时候有的数据就不给你.//解决的办法 ,伪装:// 把我们这个node.js后端服务器请求伪装成客户端(浏览器);c.queue({
uri: // "http://msn-img-nos.yiyouliao.com/inforec-20200703-f906b655a759e35e6ee1e7470184f66f.jpg?time=1593758869&signature=663062FDBD08E6A3E802F2055B3D5F2E", "https://cn-sxty2-cu-v-04.bilivideo.com/upgcxcode/46/29/203472946/203472946-1-16.mp4?expires=1593766200&platform=html5&ssig=faGf3-U7N-hzj6U60zc8Xw&oi=1006738461&trid=33046ef58ce948ddb69f3f9978c397e0h&nfc=1&nfb=maPYqpoel5MI3qOUX6YpRA==&mid=241600263&logo=80000000", filename: "06-npmUse/temp/meinv.avi", header: {
"User-Agent": "requests" }, // 让服务端伪装成客户端});

paclkage.json与package-lock.json的区别

  1. 使用npm5之前的版本,是不会生成package-lockjson这个文件的。

  2. npm5以后,包括npm5这个版本, 才会生成package-lock.json文件

  3. 当使用npm安装包的时候,npm都会生成或者更新package-lock.json文件

  • npm5以后的版本,在安装包的时候,不需要加–save (-S) 参数, 也会自动在package.json中保存依赖项
  • 当安装包的时候,会自动创建或者更新package-lock json文件
  • package-lock json文件内保存了node_ _modules中所有包的信息,包含这些包的名称、版本号、下载地址。带来好处是,如果重新npm install的时候,就无需逐个分析包的依赖项,因此会大大加快安装速度。
  • 从package-lock.json文件名来看,lock代表的是“锁定”的意思。它用来锁定当前开发使用的版本号,防止npm instal的时候自动更新到了更新版本。因为新版本有可能会更新老的api,导致之前的代码出错。
    e-lock json文件内保存了node_ _modules中所有包的信息,包含这些包的名称、版本号、下载地址。带来好处是,如果重新npm install的时候,就无需逐个分析包的依赖项,因此会大大加快安装速度。
  • 从package-lock.json文件名来看,lock代表的是“锁定”的意思。它用来锁定当前开发使用的版本号,防止npm instal的时候自动更新到了更新版本。因为新版本有可能会更新老的api,导致之前的代码出错。
  • 原来的package json文件只能锁定大版本,也就是版本号的第一位,并不能锁定后面的小版本,你每次npm install都是拉取的该大版本下的最新的版本,为了稳定性考虑我们几乎是不敢随意升级依赖包的,这将导致多出来很多工作量,测试适配等,所以package-lockjson文件出来了, 当你每次安装-一个依赖的时候就锁定在你安装的这个版本。

转载地址:http://ncclf.baihongyu.com/

你可能感兴趣的文章
有道词典for mac在Mac OS X 10.9不能取词
查看>>
关于“团队建设”的反思
查看>>
利用jekyll在github中搭建博客
查看>>
Windows7中IIS简单安装与配置(详细图解)
查看>>
linux基本命令
查看>>
BlockQueue 生产消费 不需要判断阻塞唤醒条件
查看>>
ExecutorService 线程池 newFixedThreadPool newSingleThreadExecutor newCachedThreadPool
查看>>
强引用 软引用 弱引用 虚引用
查看>>
数据类型 java转换
查看>>
"NetworkError: 400 Bad Request - http://172.16.47.117:8088/rhip/**/####t/approval?date=976
查看>>
mybatis 根据 数据库表 自动生成 实体
查看>>
win10将IE11兼容ie10
查看>>
checkbox设置字体颜色
查看>>
第一篇 HelloWorld.java重新学起
查看>>
ORACLE表空间扩张
查看>>
orcal 循环执行sql
查看>>
web.xml配置监听器,加载数据库信息配置文件ServletContextListener
查看>>
结构型模式之桥接模式(Bridge)
查看>>
行为型模式之状态模式(State)
查看>>
行为型模式之策略模式(Strategy)
查看>>