---恢复内容开始---

1、node初体验

安装完成node,写好相应的js代码后,在cmd中node 文件名即可完成编译执行过程。

2、尝试使用node搭建一个简单服务器

//引入http模块
const http = require('http')
//创建服务器
let server = http.createServer(function (req,res) {//默认有两个参数,请求与相应
res.write('welcome')
res.end()//终止响应
})
//监听及设置端口
server.listen(8080,function(){
console.log('server is running')
})

通过打印上述代码中的req对象,有用的是

.url 请求的资源地址

3、文件读写:

1)使用模块:fs

2)读取操作

const fs = require('fs')

fs.readFile('a.txt',function(err,data){
if(err){
console.log(err)
}else{
//将二进制数据转换为字符串
console.log(data.toString())
}
})

3)写入操作

const fs = require('fs')

fs.readFile('a.txt',function(err,data){
if(err){
console.log(err)
}else{
//将二进制数据转换为字符串
console.log(data.toString())
}
}) //writeFile(fileName,data,callback)
fs.writeFile('b.txt','hello,b!',function(err){
console.log(err)
})

4)结合服务器一同使用

//引入http模块
const http = require('http')
const fs = require('fs')
//创建服务器
let server = http.createServer(function (req,res) {//默认有两个参数,请求与相应
let file=`./www${req.url}`//进行目标文件路径的拼接
fs.readFile(file,function(err,data){
if(err){
res.end('读取失败哦')
}else{
res.end(data)
}
})
})
//监听及设置端口
server.listen(8080,function(){
console.log('server is running')
})

要注意的是,不论前台是按什么方式发起请求,form/ajax/jsonp,

后台的处理方式都是相同的,请求方式才有影响

4、服务器对get的处理

1)使用queryString模块

const qs=require('querystring')
qs.parse('aquerystring')//将查询字符串转为json对象
 
2)使用url模块
将帮助我们解析url地址
.parse(url,true)
将返回一个对象,包含请求参数,端口等各种信息
给了true的话query将被自动解析为json,同时也会解析pathname
const http = require('http')
const qs=require('querystring')
const urlLib=require('url') //创建服务器
let server = http.createServer(function (req,res) {//默认有两个参数,请求与相应
let obj=urlLib.parse(req.url,true)
let url=obj.pathname
let query=JSON.stringify(obj.query)
console.log(`${url}=====${query}`)
res.end('test page')
})
//监听及设置端口
server.listen(8080,function(){
console.log('server is running')
})

5、服务器对post的处理

const http = require('http')
const qs = require('querystring') //创建服务器
let server = http.createServer(function (req, res) {//默认有两个参数,请求与相应
let str = ''//用于存储发送过来的数据,不严谨
//由于通过post发送的数据可能很大,因此根据数据量大小采取分段多
//多次发送的策略
//data,在有一段数据到达后触发,可能触发多次
req.on('data', function (data) {
str += data
})
//end,数据全部到达后触发,仅触发一次
req.on('end', function () {
let postData = qs.parse(str)
console.log(postData)
res.end('请求完成')
})
})
//监听及设置端口
server.listen(8080, function () {
console.log('server is running')
})

6、阶段性总结,写一个比较完整的服务器

const http = require('http')
const qs = require('querystring')
const fs = require('fs')
const urlLib = require('url') //创建服务器
let server = http.createServer(function (req, res) {//默认有两个参数,请求与相应
//get
let obj=urlLib.parse(req.url,true)
let url=obj.pathname
const GET=obj.query //post
let str=''
req.on('data',function (data) {
str+=data
})
req.on('end',function(){
const POST=qs.parse(str)
}) //文件请求
let file='./www'+url
fs.readFile(file,function(err,data){
if(err){
res.end('404')
}else{
res.end(data)
}
}) })
//监听及设置端口
server.listen(8080, function () {
console.log('server is running')
})

node01的更多相关文章

  1. Centos7-搭建hdfs启动时报java.net.BindException: Problem binding to [node01:9000] java.net.BindException异常

    今天用阿里的服务器搭了个伪分布式的HDFS,格式化后启动hdfs,发现只有dataNode启动了,查看启动日志发现异常: 2019-01-22 15:54:50,507 FATAL org.apach ...

  2. 问题:执行[root@node01 hadoop-2.6.0-cdh5.14.0]# sbin/start-dfs.sh 后,namenode未启动

    执行[root@node01 hadoop-2.6.0-cdh5.14.0]# sbin/start-dfs.sh 后,namenode未启动. 解决步骤: 查看/export/servers/had ...

  3. Node初始以及环境搭建(Node01)

    1. 相关概念 •什么是JavaScript? •一种遵守ECMAScript标准的脚本语言 •最初只能运行在浏览器端 •浏览器中的 JavaScript 可以做什么? •操作DOM:表单验证.动画 ...

  4. 集群CLUSTER种类介绍

    一.集群CLUSTER 介绍 计算机集群Cluster,可以把多台计算机 连接在一起使用,平分资源或互为保障.其好处不言而喻,群集中的每个计算机被称为一个节点,节点可添加可减少,在这些节点之上虚拟出一 ...

  5. Putty部署tomcat

    webserver下是tomcatprojects放置项目源代码webapp下放置项目 1. 输入地址栏 登入进去32 192.168.1.32 端口号22 2.进入projects文件夹 cd pr ...

  6. shell常用命令归类整理

    shell 命令整理     bash shell 含有许多功能,因此有许多可用的命令:本文档仅罗列了一些常用命令及其使用频率较高的参数.#本文档仅罗列了一些常用命令及其使用频率较高的参数.#vers ...

  7. Hadoop安装——如何修改端口冲突

    在一个集群中,尽管是多用户,但是端口是公用的,存在冲突的可能.如果另一个用户已经采用默认配置安装了hadoop,那么当前用户再安装hadoop时,必然会产生端口的冲突.在配置自己的hadoop时,可以 ...

  8. Kafka Shell基本命令(包括topic的增删改查)

    转载请注明出处:http://www.cnblogs.com/xiaodf/ 创建kafka topic 查看所有topic列表 查看指定topic信息 控制台向topic生产数据 控制台消费topi ...

  9. 网络爬虫(java)

       陆陆续续做了有一个月,期间因为各种技术问题被多次暂停,最关键的一次主要是因为存储容器使用的普通二叉树,在节点权重相同的情况下导致树高增高,在进行遍历的时候效率大大降低,甚至在使用递归的时候导致栈 ...

随机推荐

  1. 「JavaScript面向对象编程指南」基础

    DOM标准是独立的(即并不依赖JS)操作结构化文档的方式 BOM实际是个与浏览器有关的对象集合,原来没任何标准可言,H5诞生后才被定义了一些浏览器间通用的对象标准 ES5严格模式"use s ...

  2. mysql登录报错“Access denied for user 'root'@'localhost' (using password: YES”)的处理方法

    环境 CentosOS 6.5 ,已安装mysql 情景 root密码忘记,使用普通用户无法登录 解决 问题一 无法使用mysql命令 参考文章:https://www.cnblogs.com/com ...

  3. 【easy】532. K-diff Pairs in an Array

    这道题给了我们一个含有重复数字的无序数组,还有一个整数k,让我们找出有多少对不重复的数对(i, j)使得i和j的差刚好为k.由于k有可能为0,而只有含有至少两个相同的数字才能形成数对,那么就是说我们需 ...

  4. 收藏一个可以学习javascript prototype的链接

    https://github.com/mqyqingfeng/Blog/issues/2

  5. python学习:一

    第三章:实践题作业 1.编写一个名为 collatz()的函数,它有一个名为 number 的参数.如果参数是偶数,那么 collatz()就打印出 number // 2, 并返回该值.如果 num ...

  6. UiAutomator2.0 - 获取同行控件

    目录 问题:UI测试时,在同一个界面出现相同的属性的控件(如图),对于这种控件的获取很是无奈.如果直接通过控件id去查找的话总是会返回界面该类型的第一个控件. 解决: 1.UiObject2 中已经给 ...

  7. C# .net 填充无效,无法被移除 微信小程序解密失败的解决办法

    微信小程序获取用户信息诸如unionId的时候需要解密,如果遇到偶然的解密失败(填充无效,无法被移除),原因很有可能是session_key错误, 也是就你用作解密的session_key并不是微信用 ...

  8. .net基础学java系列(八)SpringBoot

    嘟嘟独立博客 Spring-Boot干货系列 http://tengj.top/categories/Spring-Boot干货系列/ 龙码精神 Java Spring Boot VS .NetCor ...

  9. WPF管理系统自定义分页控件 - WPF特工队内部资料

    最近做一个演示的管理系统项目,需要用到分页控件,在网上找了很多,依然找到与UI模版匹配的,最后干脆自己写一个. 分页控件分析: 1.分页控件分简单显示和复杂显示两种: 2.包含上一页.下一页以及页码明 ...

  10. XMLHttpRequest中常用的方法

    a.) abort() 停止当前请求b.) getAllResponseHeaders() 把HTTP请求的所有响应首部作为键值对返回c.) open("method", &quo ...