web服务器的创建

1.简单的服务器创建

// 1. 引入http模块
const http = require('http');
// 2. 创建服务
const server = http.createServer(function(req, res) {
  console.log('有人来访问了')
   //设置响应头,content-type用来告诉对方本次传输的数据的类型是什么。
  res.setHeader('content-type','text/html;charset=utf8')
  //res.end()结束请求,格式只能是buffer或者是String
  res.end('hello world');
});
//启动服务server.listen(端口号,[回调函数])
server.listen(8081, function() {
  console.log('服务器启动成功,请在http://localhost:8081中访问....');
});

http为核心模块

cmd切换到该目录下,并执行:node 文件名.js

连接自己的服务器localhost:端口号 或IP地址:端口号

连接到别人的服务器要在同一局域网下 IP地址:端口号

常用方法及属性:

response.setHeader()  设置响应头来告诉服务器本次返回的数据是什么类型的

 response.end()  使 Web 服务器停止并返回当前结果

response.statueCode  用于指定状态码

request.url 获取本次请求的路径  路径+查询字符串,如果没有的话为 '/'

2.写一个处理请求

  • 在请求头中设置content-type来告诉服务器,本次请求携带的数据是什么类型的

  • 在响应头中设置content-type来告诉服务器,本次返回的数据是什么类型的

常见的几种文件类型及content-type

  • .html:res.setHeader('content-type', 'text/html;charset=utf8')

  • .css:res.setHeader('content-type', 'text/css;charset=utf8')

  • .js:res.setHeader('content-type', 'application/javascript;charset=utf8')

  • .png:res.setHeader('content-type', 'image/png')

  • json数据:res.setHeader('content-type', 'application/json;charset=utf-8')

目录如下:

|-public
|-public/index.html
|-public/stye.css
|-public/1.png
|-server.js

// 当收到用户的请求之后
// 在public下去读这个文件
//  读到:返回
//  读不到:返回404

const http = require('http')
const path = require('path')
const fs = require('fs')

// 放一个对象,其中保存所有的 后缀名与content-type的一一对应关系
const mapExtToContentType = {
  '.html': 'text/html;charset=utf8',
  '.jpg': 'image/jpg',
  '.css': 'text/css;charset=utf8',
  '.js': 'application/javascript',
  '.ico': 'image/ico'
}

const server = http.createServer((req, res) => {
  //获取请求地址:路径+查询字符串
  const url = req.url
  // 获取后缀名
  const ext = path.extname(url)
  console.log(url, ext)
  // 1. 拼接地址
  const filePath = path.join(__dirname, 'public', url)
  // 2. 读资源文件
  	fs.readFile(filePath,(err,callback)=>{
      // 根据不同的后缀名,补充不同的content-type
      // .html ---> text/html;charset=utf8
      // .jpg ---> image/jpg
      if(err) {
        console.log(err)
    		res.statusCode = 404
    		res.end('404')
      } else {
        if(mapExtToContentType[ext]) {
         //补充不同的content-type
        res.setHeader('content-type', mapExtToContentType[ext])
      }
      res.end(content)
      })
})

server.listen(8001, () => {
  console.log('你的服务器在8001就绪');
})

思路:

  • 把所有的静态资源(.html,.png,.css,.js)全放在一个指定的目录里;

  • 用核心模块path的join方法获取文件的地址,extname获取后缀名

  • 收到用户的请求之后,去指定的目录下去找对应的文件:找到文件设置响应头数据类型,没找到就改变状态码,并结束

3.写一个get类型接口

目录:

|-db
|---data.json  # 数据
|-server.js    # 你的代码

// server.js
const http = require('http');
const path = require('path');
const fs = require('fs');

//获取要读取文件的路径
const filePath = path.join(__dirname, 'db', 'data.json')
const app = http.createServer((req, res) => {
//通过判断输入的地址,确定是否为GET请求
  if (req.url === '/getList' && req.method=== 'GET') {
    //读取文件
    fs.readFile(filePath, 'utf8', (err, data)=>{
      //使 Web 服务器停止并返回当前结果
      res.end(data)
    })
  } else {
    res.end('error');
  }
});
app.listen(8083, () => {
  console.log(8083);
});
  • 注意:类型

  • req.method 可以判断请求的类型

  • res.end()的参数只能是字符串(或者是buffer),而不能是对象

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值