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

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. python多任务抓取图片

    import re import urllib.request import gevent def download(image_download, images_path,i): headers = ...

  2. CNN卷积神经网络

    import os # third-party library import torch import torch.nn as nn import torch.utils.data as Data i ...

  3. SimpleDateFormat 常用用法

    1.SimpleDateFormat函数语法:                   G 年代标志符          y 年          M 月          d 日          h ...

  4. 终于有人把P2P、P2C、O2O、B2C、B2B、C2C 的区别讲透了!

    原文地址:https://www.cnblogs.com/sap-ronny/p/8149960.html P2P.P2C .O2O .B2C.B2B. C2C,每天看着这些常见又陌生的名词,如果有人 ...

  5. java sigar获取本地信息以及org.hyperic.sigar.SigarException: The device is not ready报错解决

    window下,使用java sigar 获取磁盘使用率,cpu使用率以及内存使用情况等信息时. 一:首先需要下载jar包和相关文件 sigar-1.6.4.zip 如果想了解更多可以去 sigar官 ...

  6. 主席树+树链剖分——南昌邀请赛Distance on the tree

    学了差不多一星期的主席树+树链剖分,再来看这题发现其实是个板子题 一开始想复杂了,以为要用类似求树上第k大的树上差分思想来解决这道题,但其实树链上<=k的元素个数其实直接可以用树链剖分来求 具体 ...

  7. C语言作业3

    一.实验目的与要求 1.用for语句实现循环 (1)求数列前n项和 掌握for语句实现循环的方法 (2)求数列前n项和 掌握for语句实现循环的方法 循环嵌套的使用 2.用while循环语句实现循环 ...

  8. pip 源

    pip使用过程中的痛苦,大家相必都已经知道了,目前豆瓣提供了国内的pypi源,源包相对会略有延迟,但不影响基本使用. pip install some-package -i https://pypi. ...

  9. Flink写入kafka时,只写入kafka的部分Partitioner,无法写所有的Partitioner问题

    1. 写在前面 在利用flink实时计算的时候,往往会从kafka读取数据写入数据到kafka,但会发现当kafka多个Partitioner时,特别在P量级数据为了kafka的性能kafka的节点有 ...

  10. gitlab搭建,结合pycharm和vs2015配置用于开发python和c++

    利用Ubuntu16.04服务器搭建gitlab仓库,本地windows系统使用pycharm和VS开发,通过软件配置可进行代码管理. 1.gitlab安装 ①安装依赖包: sudo apt-get ...