前言

我们前面已经学习完了Node中一些核心模块还有如何正确配置响应头的Content-Type,今天我们来实现一个简单的demo,巩固下之前学习的内容。

需求

我们平时访问百度或者其他大的门户网站的时候,服务器给我们返回的基本都是一个HTML文档,然后浏览器解析渲染成页面。

今天我们就用Node.js来搭建一个简单的web服务器实现上面的类似效果。

主体

  1. 创建一个文件夹baidu,并且在里面创建子文件夹resourceresource文件夹用来存放我们服务器上的资源文件,比如图片(xxx.jpg),html文档(index.html)等等。这里我就放置一张图片和一个index.html文档。

  1. 我们在baidu文件夹下创建服务器脚本文件server.js,代码如下:
let http = require('http')  // 引入http核心模块,创建web服务器
let fs = require('fs') // 引入fs核心模块,操作服务器资源文件
let server = http.createServer()
server.on('request', (req, res) => {
let url = req.url
if (url === '/') {
fs.readFile('./resource/index.html', (error, data) => {
if (error) {
res.setHeader('Content-Type', 'text/plain; charset=utf-8')
res.end('你要的资源不存在,请稍后再试!')
} else {
res.setHeader('Content-Type', 'text/html; charset=utf-8')
res.end(data)
}
}) // 当请求路径为‘/’,返回index.html文档,所以这里需要借助fs.readFile()来读取文档内容
} else if (url === '/img') {
fs.readFile('./resource/05.jpg', (error, data) => {
if (error) {
res.setHeader('Content-Type', 'text/plain; charset=utf-8')
res.end('你要的资源不存在,请稍后再试!')
} else {
res.setHeader('Content-Type', 'image/jpeg')
res.end(data)
}
}) // 同理,这里也需要对文档的操作
} else {
res.end('404 NOT FOUND')
}
})
server.listen(3000, () => {
console.log('服务器已经启动,可以访问了。。。')
})
  1. 在Node环境下启动server.js,看到效果如下:

经过这样,我们就实现了一个简易的web服务器,并且返回一个html文档给浏览器解析了

说明

本仓库是自己Node.js学习过程的真实记录,以后会每天更新一些新的知识点,希望可以对想要学Node.js的同学有一些帮助,欢迎star,你们的点赞是我更新的持久动力。同时如果你觉得本仓库中的一些知识点有错误也可以issue我,方便后期我订正!

本仓库同时在博客园和掘金更新,欢迎写博客的朋友一起学习交流。

博客园

找我

掘金

找我

GitHub

找我

Node.js学习之(第三章:简易小demo)的更多相关文章

  1. Node.js学习(第四章:初见express)

    Express框架是一款简洁而灵活的node.js web应用框架.前面我们自己手动创建服务器在Express中就是一个API的事情,这就使得我们更加注重业务的功能和开发效率上,不必纠结过多底层的事情 ...

  2. Node.js学习之(第二章:exports和module.exports)

    前言 Node中,每个模块都有一个exports接口对象,我们需要把公共的方法或者字符串挂载在这个接口对象中,其他的模块才可以使用. Node.js中只有模块作用域,默认两个模块之间的变量,方法互不冲 ...

  3. Node.js学习笔记(三): 事件机制

    大部分的nodejs核心api都建立在异步的事件驱动架构之上,所以events是Node.js 最重要的模块,它提供了唯一的接口.events 模块不仅用于用户代码与 Node.js 下层事件循环的交 ...

  4. node.js学习笔记(三)——事件循环

    要理解事件循环,首先要理解事件驱动编程(Event Driven Programming).它出现在1960年.如今,事件驱动编程在UI编程中大量使用.JavaScript的一个主要用途是与DOM交互 ...

  5. The Road to learn React书籍学习笔记(第三章)

    The Road to learn React书籍学习笔记(第三章) 代码详情 声明周期方法 通过之前的学习,可以了解到ES6 类组件中的生命周期方法 constructor() 和 render() ...

  6. NODE.JS学习的常见误区及四大名著

    NODE.JS学习的常见误区及四大名著 前段时间由于不满于社区里很多人对于NODE.JS的种种误解而写了一篇文章名为: NODE.JS之我见:http://www.cnblogs.com/pugang ...

  7. Node.js学习系列总索引

    Node.js学习系列也积累了一些了,建个总索引方便相互交流学习,后面会持续更新^_^! 尽量写些和实战相关的,不讲太多大道理... Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- ...

  8. 【入门必备】最佳的 Node.js 学习教程和资料书籍

    Web 开发人员对 Node.js 的关注日益增多,更多的公司和开发者开始尝试使用 Node.js 来实现一些对实时性要求高,I/O密集型的业务.这篇文章中,我们整理了一批优秀的资源,你可以得到所有你 ...

  9. 一点感悟:《Node.js学习笔记》star数突破1000+

    写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...

  10. Node.js学习看这里:基础、进阶、文章

    Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的.可扩展的网络应用. Node.js采用事件 ...

随机推荐

  1. 第06组 Beta冲刺(2/5)

    队名:拾光组 组长博客链接 作业博客链接 团队项目情况 燃尽图(组内共享) 组长:宋奕 过去两天完成了哪些任务 维护后端代码 学习后端架构 GitHub签入记录 接下来的计划 维护后端代码,跟进组员完 ...

  2. 如何SpringBoot项目改为外置Tomcat启动

    正常情况下,我们开发 SpringBoot 项目,由于内置了Tomcat,所以项目可以直接启动,部署到服务器的时候,直接打成 jar 包,就可以运行了 (使用内置 Tomcat 的话,可以在 appl ...

  3. android: 结合BottomNavigationView、ViewPager和Fragment 实现左右滑动的效果

    主界面:MainActivity package com.yongdaimi.android.androidapitest; import android.os.Bundle; import andr ...

  4. 【java爬虫】利用webmagic框架实战demo

    webmagic框架:http://webmagic.io/ WebMagic的结构分为Downloader.PageProcessor.Scheduler.Pipeline四大组件 PageProc ...

  5. Spring cloud微服务安全实战-7-10ELK日志采集架构优化

    ELK搭建起来.采集日志,展示.但是这个架构还有一些问题. 可用性的问题,springboot的应用,随着业务的增长会越来越多.logstash压力就会越来越大.大到一定的程度可能就会吧logstas ...

  6. layui table.reload的bug

    bug1: bug描述:当cols列在reload中有变化时,渲染后部分cols列自动隐藏(并未对这些列设置hide:true) bug版本:2.3.5版本有此bug,今日更新最新版本2.5.5 仍有 ...

  7. ue4 优化建议与经验

    转自:https://dawnarc.com/2016/12/ue4%E4%BC%98%E5%8C%96%E5%BB%BA%E8%AE%AE%E4%B8%8E%E7%BB%8F%E9%AA%8C/ 内 ...

  8. svn密码找回

    TortoiseSVN Password Decrypterhttp://www.leapbeyond.com/ric/TSvnPD/点击打开链接去这个地址下载这个,然后直接运行,就可以看到你的use ...

  9. vue-cli3 element 分页组件el-pagination的基本使用

    <!--分页组件--> <el-pagination :total="total" :current-page="currentPage" : ...

  10. !与&&优先级的问题

    逻辑否(!)是一元操作符,逻辑与(&&)是二元操作符,一元操作符的优先级高于任何二元操作符. 例如: bool flag:int t: if(!flag && t &g ...