nodejs 学习笔记

readFile 和 writeFile

这是node.js提供的一个的模板里的函数。使用前要先引入模板

var fs = require("fs")
// require 用来引入所需模板

readFile 读取文件

readFile方法是将要读取的文件内容完整读入缓存区,再从该缓存区中读取文件内容,
这是同步方法,

格式:
var fs = require("fs")
fs.readFile('aa.json','utf8',(err,data)=>{
    if(err){
        return err
    }
    console.log(data)
})

对应的有一个异步方法readFileSync,都是读取文件

var fs = require("fs")
var text = fs.readFileSync('aa.json','utf8',)
console.log(text)

writeFile 写入文件

writeFile方法是将要写入的文件内容完整的读入缓存区,然后一次性的将缓存区中的内容写入都文件中,设置同步方法。

var fs = require("fs")
var str = 'sadsavxzawsdncxklzcSDaskdln撒旦'
fs.writeFile('a.text',str, (err)=>{
    if(err){
        console.log('写入失败')
    }else{
        console.log('写入成功')
    }
})

对应的有一个异步方法writeFileSync,都是写入文件

ar fs = require("fs")
var str = 'sadsavxzawsdncxklzcSDaskdln撒旦'
fs.writeFileSync('a.text',str)

文件追加内容

//  如果文件不存在则创建 , 文件存在则追加内容
fs.appendFile(url, content, () => {
    //  url 文件的地址
    //  content 追加的文件内容
    //  callback 回调函数 写入失败的信息
})

删除文件

fs.unlink(url, () => {
    //    url 文件的地址
     //  callback 回调函数 删除失败的信息
})

文件重命名

fs.rename(oldUrl, newName,  () => {
    //    oldUrl 原文本的地址  源文件名字
    //  newName 重新命名文件名   新名字
     //  callback 回调函数 命名失败的信息
})

服务器基础

网站的组成

网站应用程序主要分为两大部分:客户端和服务器端。
客户端:在浏览器中运行的部分,就是用户看到并与之交互的界面程序。使用HTML、CSS、JavaScript构建。
服务器端:在服务器中运行的部分,负责存储数据和处理应用逻辑

网站服务器

能够提供网站访问服务的机器就是网站服务器,能够接收客户端的请求,能够对请求做出响应,可以简单的理解为一台电脑,以前放服务器的叫机房,现在都叫数据中心

IP地址

IP 地址是互联网中各个设备的唯一标识。
IP是Internet Protocol Address的简写,代表互联网协议地址.

域名

尽管IP地址能够唯一地标记网络上的计算机,但IP地址是一长串数字,不直观,而且用户记忆十分不方便,于是人们又发明了另一套字符型的地址方案,即所谓的域名地址。IP地址和域名是一一对应的,这份域名地址的信息存放在一个叫域名服务器(DNS,Domain name server)的主机内,使用者只需了解易记的域名地址,其对应转换工作就留给了域名服务器。域名服务器就是提供IP地址和域名之间的转换服务的服务器。

端口

端口是计算机与外界通讯交流的出口,用来区分服务器电脑中提供的不同的服务

因为服务器上的运行的软件太多,端口可以让各个软件正常运行互不影响。

url

URL 格式:传输协议://服务器IP或域名:端口/资源所在位置标识

创建wed服务器

使用 nodejs 语言编写创建服务器

// 引入http模块
const http = require('http')
// 创建一个http服务
var app = http.createServer()
/*为app对象注册 `request` 事件,当客户端有请求到达服务器后,会触发这个事件执行回调函数中有两个参数
req:表示客户端的请求信息,可以从中获取客户端的信息
res:表示服务端的相应,可以使用此对象向客户端发送信息
*/
app.on('request', (req, res) => {
 // 服务器必须向客户端发送响应信息,否则客户端就会一直等待
 	res.end('ok')
})
// 开启服务器端口3000
app.listen(3000, () => {
	console.log('Server is running at http://127.0.0.1:3000')
})

http

服务端对话客户端的过程:
DSN 解析,建立TCP连接,发送http请求
server接收到http请求,处理,并返回响应
客户端接收到返回数据,并处理数据,如渲染页面,执行Js

获取Post方式提交的数据

const http = require('http')
var app = http.createServer()
app.on('request', (req, res) => {
	res.setHeader("content-type", "application/json")
	if(req.url=="/spi/index"){
        let postData = '';
		req.on("data", (params) => {
			postData += params;
		});
		req.on("end", () => {
			res.end(postData)
		});
	}
	
})
// 开启服务器端口3000
app.listen(3000, () => {
	console.log('Server is running at http://127.0.0.1:3000')
})

获取客户端以post方式获取的数据
为请求对象添加两个事件监听:data和end
因为post方式传递的数据两可能比较大,所以数据可能不是一次性传递过来的,每当接收到请求体中的数据,都会触发data事件3)当数据接受完毕后,就会触发 end 事件
所以,先声明一个变量,在 data事件中累加变量,在end事件中,将其解析为真正的post请求格式

引入文件(模块化)

Node.js规定一个JavaScript文件就是一个模块,每一个模块都是一个单独的作用域,模块内部定义
的变量和函数默认情况下在外部无法得到
模块内部可以使用exports对象进行成员导出, 使用require方法导入其他模块。

格式:
const nams = require("文件地址")
例:
const moban= require("../controller/blog")

文件只是引入但里面的方法、类都还不能用,需要先进行包装暴露
两个方法:exports、 module.exports
exports只能使用语法来向外暴露内部变量,module.exports既可以通过语法,也可以直接赋值一个
对象

exports

function add(a,b){
	return a+b
}
exports.add=add

调用:

console.log(moban.add(6,6))

module.exports

module.exports.a=10
module.exports.b=20
module.exports.add=(a,b)=>a+b

调用:

const a_module=require('./a')
console.log(a_module.a);
console.log(a_module.b);
console.log(a_module.add(4,5));

Promise

const fs = require('fs')
// resolve 和 reject 就是两个形参,表示两个回调函数
// 成功了,调用resolve函数,失败了调用reject函数,同时传递参数
let p1 = new Promise((resolve, reject) => {
 // 将异步代码写到这个函数中
 	fs.readFile('a.txt', 'utf8', (err, data) => {
	 	if (err) {
 			reject('读取失败了')
		} else {
			resolve(data)
		}
	 })
})
/*
异步任务结束后,
如果成功了,会触发then事件,我们就传递一个实参进去,这个参数是一个函数,会赋值给上面的形参 resolve
如果失败了,会触发catch事件,我们就传递一个实参进去,这个参数是一个函数,会赋值给上面的形参 reject
*/
p1.then(result => {
	console.log(result)
}).catch(err => {
	console.log(err)
})

class 类

class 属性定义了元素的类名。
class 属性通常用于指向样式表的类。但是,它也可以用于 JavaScript 中(通过 HTML DOM), 来修改 HTML 元素的类名。

 // 匿名:
let point = class{
    constructor(x,y){
        this.x = x;
        this.y = y;
    }
    toString(){
        return '('+this.x+','+this.y+')'
    }
}

 // 命名:
class point{
    constructor(x,y){
        this.x = x;
        this.y = y;
    }
    toString(){
        return '('+this.x+','+this.y+')'
    }
}

类的调用

var p1 = new pinot('abcs','132ws')
p1.toString();
console.log(p1.x);

类的方法

constructor 方法
  constructor 方法是类的默认方法,通过 new 命令生成对象实例时,自动调用该方法(默认返回实例对象 this)。一个类必须有 constructor 方法,如果没有显式定义,一个空的 constructor 方法会被默认添加。一个类只能拥有一个名为 “constructor” 的特殊方法,如果类包含多个 constructor 的方法,则将抛出 一个 SyntaxError 。

1.在类中声明方法的时候,方法前不加 function 关键字
2.方法之间不要用逗号分隔,否则会报错
3.类的内部所有定义的方法,都是不可枚举的(non-enumerable)
4.一个类中只能拥有一个 constructor 方法

静态方法

静态方法可以通过类名调用,不能通过实例对象调用,否则会报错

class Person {
    static sum(a, b) {
        console.log(a + b)
    }
}
var p = new Person()
Person.sum(1, 2)  // 3
p.sum(1,2)     //  

类的继承

extends 属性用来继承类

class BaseModel {
  constructor(msg, data) {
    this.msg = msg;
    this.data = data;
  }
}
class SuccessModel extends BaseModel {
  constructor(msg, data) {
    // 调用父类的方法  super
    super(msg, data);
    this.errno = 0;
  }
  str(){
      
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值