node学习笔记1

node

what

是一个javascript运行时环境

  • 简单点讲就是Node.js可以解析和执行javascript代码
  • 以前只有浏览器可以解析执行javascript代码
  • 也就是说现在的javascript可以完全脱离浏览器来运行,一切都归功于Node.js
  • chrome V8 runtime
  • 事件驱动*
  • 非阻塞的I/O *

I/O : input output 输入输出流 正常下I/O的操作都是阻塞的(ajax 同步)

网格请求 数据库处理 文件的读写 , (非阻塞)
优点: 高并发特别好

why为什么学

  1. 防止甩锅 明确数据交互的错误问题在谁 具有服务端开发经验更好
  2. 能够书写API 斜杠青年
  3. 了解前后端的交互流程 front-end back-end
  4. 全干

api 接口文档

js运行环境

  • 浏览器
    • 基本语法
    • bom
    • dom
    • ajax
    • 系统文件数据库(不能,不是语言不能,安全性考虑不能操作)
      +服务器
    • 基本语法
    • 能操作数据库
    • 能操作本地文件
      限制语言能力的不是语言本身,而是语言的运行环境(平台)

nvm 版本管理工具

简单的http服务

代码:

var http = require('http');

//1.创建Server
var server=http.createServer();

//2.监听request请求事件,设置请求处理函数
server.on('request',function (req,res) {
    console.log('收到请求了,请求路径是:'+req.url);
    // res.end('Hello world!');
    //根据不同的请求路径发送不同的响应结果
    //1.获取请求路径
    //res.url获取到的是端口号之后的那一部分路径
    //也就是说所有的url都是以/开头的
    //2.判断路径处理响应
    var url=req.url;

    if (url=='/') {
        res.end('index page');
    }else if(url=='/login'){
        res.end('login page');
    }else{
        res.end('404 Not Found.');
    }
})

可以响应数组,但要转化

var http = require('http');

//1.创建Server
var server=http.createServer();

//2.监听request请求事件,设置请求处理函数
server.on('request',function (req,res) {
    console.log('收到请求了,请求路径是:'+req.url);
    // res.end('Hello world!');
    //根据不同的请求路径发送不同的响应结果
    //1.获取请求路径
    //res.url获取到的是端口号之后的那一部分路径
    //也就是说所有的url都是以/开头的
    //2.判断路径处理响应
    var url=req.url;

    // if (url=='/') {
    //     res.end('index page');
    // }else if(url=='/login'){
    //     res.end('login page');
    // }else{
    //     res.end('404 Not Found.');
    // }

    if (url==='/products') {
        var products=[
            {
                name:'苹果X',
                price:8888
            },
            {
                name:'菠萝X',
                price:2888
            },
            {
                name:'小辣椒X',
                price:1888
            }
        ];

        //响应内容只能是二进制数据或者是字符串

        res.end(JSON.stringify(products));  //转化为字符串
    }
})

//3.绑定端口号,启动服务
server.listen(3000,function(){
    console.log('服务启动成功,可以访问了...');
})

3.Node中的JavaScript

  • EcmaScript
    • 没有DOM,BOM
  • 核心模块
  • 第三方模块
  • 用户自定义模块

3.1 核心模块

Node为JavaScript提供了很多服务器级别的API

  • 文件操作的fs核心模块
  • http构建的http模块
  • path路径操作模块
  • os操作模块

3.2

以后只要说这个模块是一个核心模块,必须手动先使用require方法来加载,然后才能使用

var  fs=require('fs');   //参数不能乱写
var http=require('http'); 

3.3 用户自定义模块

  • require

require是一个方法
它的作用是用来加载模块的
相对路径必须加./
可以省略后缀名
相对路径中的 ./ 不能省略,否则报错

  • 模块系统
    • 在node中,没有全局作用域,只有模块作用域
    • 在node中,只能通过require方法来加载执行多个javascript文件
    • require加载只能是执行其中的代码,文件与文件之间由于是模块作用域,所以不会有污染的问题
      • 模块完全是封闭的
      • 外部无法访问内部
      • 内部也无法访问外部

require 方法有两个作用:

  1. 加载文件模块并执行里面的代码
  2. 拿到被加载文件模块导出的接口对象

既然是模块作用域,那如何让模块与模块之间进行通信呢?
有时候,我们加载文件模块的目的不是为了简简单单的执行里面的代码,更重要的是为了使用里面的内容

  • 每个文 件模块中都提供了一个对象 :exports
  • exports默认是一个空对象
  • 你要做的就是把所有需要被外部访问的成员手动的挂载到exports接口对象中
  • 然后谁来’require’这个模块,谁就可以得到模块内部 exports接口对象

案例

a.js


var fs=require('fs')

console.log(ret.foo);
console.log(ret.add(1110,30));

ret.readFile('./a.js')

fs.readFile('./a.js',function (err,data) {
    if (err) {
        console.log('读取文件失败')
    }else{
        console.log(data.toString())
    }
})

b.js


exports.foo='hello'
// console.log(exports);

exports.add=function (x,y) {
    return x+y;
}
exports.readFile=function (path,callback) {
    console.log('文件路径:',path)
}

Node 在Vscode中要调试可下载插件,然后修改laungch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

        {
            "type": "node",
            "request": "launch",
            "name": "Launch Program",
           ~~// "program": "${file}/a.js"~~  //原始是这样的
           "program": "${workspaceRoot}/加载与导出/a.js"  //要改成这样才能运行
        }
    ]
}

3.4 第三方模块

4.WEB服务器开发

4.1 ip地址和端口号

  • IP地址用来定位计算机
  • 端口号用来定位具体的应用程序
    (所有需要联网通信的软件必须具有端口号)
  • 端口号的范围从0-65536之间
  • 在计算机中有一些默认端口号,最好不要去使用 ,如80
  • 可以同时开启多个服务,但一定要确保占用的端口号不一致
//require 

var http = require('http')
// 1. 创建Server
var server = http.createServer()

// 2. 监听Server的request请求事件,设置请求处理函数
server.on('request',function (req,res) {

    //在服务端默认发送的数据,其实是utf8编码的内容
    //但是浏览器不知道你是utf8编码的内容
    //解决方法就是告诉浏览器我给你发送的编码是什么
    //在http协议中,Content-Type就是用来告知对方我给你发送的数据内容是什么
     res.setHeader('Content-type','text/plain;charset=utf-8')
    res.end('hello 世界')
})

// 3. 绑定端口号,启动服务
server.listen(3000,function (params) {
    console.log('Server is Running...')
})

node报错

node 报错 throw er;//unhandled ‘error’ event
端口被占用. 找到端口号所对应的pid ,直接干掉就行了

  • netstat -ano|findstr “3000”
  • taskkill -PID 13512 -F

Content-Type

  • 服务器最好把每次响应的数据是什么内容类型都 告诉客户端
  • 不同资源对应的Content-Type是不一样的的,具体参照:http://tool.oschina.net/commons
  • 对于文本类型的数据最好都加上编码,目的是为了防止中文解析乱码问题
  • 通过网络发送文件
    • 发送的并不是文件,本质上来讲发送的是文件的内容
    • 当浏览器收到服务器响应内容之后,就会根据你的Content-Type进行相应的解析处理

var http = require('http')
var fs=require('fs')
var server = http.createServer()
server.on('request',function (req,res) {

    // index.html
    var url=req.url;
    if (url==='/') {
       // res.end('<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><title>Document</title></head><body><h1>首页</h1></body></html>')
        fs.readFile('./index.html',function (err,data) {
            if (err) {
                res.setHeader('Content-Type','text/plain;charset=utf-8')
                res.end('文件读取失败,请稍后重试!')
            }else{
                //data默认是二进制数据,可以通过.toString转化为咱们能识别的字符串
                //res.end() 支持两种数据类型,一种是二进制,一种是字符串
                res.setHeader('Content-Type','text/html;charset=utf-8')
                res.end(data)
            }
        })
    } else if (url==='/hj') {
        fs.readFile('./hudie.png',function (err,data) {
            if (err) {
                res.setHeader('Content-Type','text/plain;charset=utf-8')
                res.end('文件读取失败,请稍后重试!')
            }else{
                //data默认是二进制数据,可以通过.toString转化为咱们能识别的字符串
                //res.end() 支持两种数据类型,一种是二进制,一种是字符串
                res.setHeader('Content-Type','image/png')
                res.end(data)
            }
        })
    }
})

server.listen(3000,function (params) {
    console.log('Server is Running...')
})

无论你的代码是否有分号,都 建议你如果一行代码以( [ ` 开头的,最好前面补个分号;

为了约定大家的代码风格,所以在社区中诞生了一些比较规范的代码风格:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
08-10
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值