js为什么能在浏览器中运行

  • 浏览器内部存在一个js解析器,解析ECMAscript

    把引擎从浏览器中抽离出来,不再依赖浏览器,作为一个软件安装在电脑上,在命令行里面, 这个软件就是node

node 和 js 的区别

  • 原生js必须依赖浏览器运行
  • node不再依赖浏览器
  • dom\bom 原生js的组成
  • node不依赖浏览器 , 不会存在特别大的兼容问题
  • js不能完成 创建服务 , 连接数据库 , 操作本地文件(读写) , node可以

node 暂时在大型项目里面有缺陷 : 计算量

node 作为中间层 一些小项目的后端

lts稳定版 current测试版

nvm list   弹出安装的node版本
nvm list available 现在源上能安装的所有的node版本
nvm install 10.15.2 node安装
nvm uninstall 10.15.3 卸载
nvm use 10.16.3 切换node版本
查看版本   npm -v
安装模块 npm install <module name>
全局安装 npm install <module name> -g
卸载模块 npm uninstall <module name>
查看安装包 npm ls
更新模块 npm update <module name>
搜索模块 npm search <module name>
淘宝镜像
https://npm.taobao.org/

commonJS

规范 : 模块化的思想

  • 定义模块 一个js文件,每个js文件都有自己的功能

  • 定义好模块后.暴露接口 给其他引用当前模块的模块提供数据

    module.exports={
    num : 1,
    fn : function(){ }
    }
  • 引用模块 require('模块的名称');

node.js

fs模块

 使用模块之前:
//引入模块
const fs = require('fs');
stat
得到文件与目录的信息:stat
参数1 : 路径 参数2 : 回调函数 (err,stats) {stats.isFile() 检查是不是文件} fs.stat('./aaaa.js',(err,stats) =>{
if(err){
console.log(err);
}else{
console.log(stats.isFile())
}
})
/*
正确返回 true 报错:
{ [Error: ENOENT: no such file or directory, stat 'D:\aaaa.js']
errno: -4058,
code: 'ENOENT',
syscall: 'stat',
path: 'D:\aaaa.js' }
*/
mkdir
        创建一个目录(文件夹):mkdir
参数1 : 文件名称 参数2 : 回调 (err){当没有创建 成功的时候返回的值} fs.mkdir('./new',(err)=>{
if(err){
console.log(err);
}
}) fs.mkdir('./new/child',(err)=>{
if(err){
console.log(err);
}
})
writeFile
       创建文件并写入内容:writeFile
参数1 : 文件名称 参数2 : 更改的信息 参数3:回调 (err) {修改失败所做的事件} fs.writeFile('./new/a.js','console.log(111)',(err)=>{
console.log(err)
})
readFile 读取文件
        读取文件的内容:readFile
参数1 : 文件的 名称 参数2 : 编码格式 参数3 :回调 (err,data){ if(err){ console.log(err) }else{ console.log(data) 返回buffer类型 } } fs.readFile('./new/a.js','utf-8',(err,data)=>{
if(err){
console.log(err);
}else{
console.log(data);
}
})
readdir
        列出目录的东西:readdir
参数1 : 路径 参数2 : 编码格式 参数3: (err,list){ consle.log(list) } fs.readdir('./new',(err,list)=>{
if (err) {
console.log(err)
}else{
console.log(list)
}
})
rename
        重命名目录与文件:rename
参数1 : 旧文件 参数2 :新文件 参数3 (err){ console.log(err) }; fs.rename('./new/a.js','./new/b.js',(err)=>{
if (err) {
console.log(err);
}
})

path模块

join
    path.join()Unix系统是”/“,Windows系统是”\“

    let str = path.join('/a','/b','/c','/d');
console.log(str);
basename
let str =  path.basename('foo/bar/baz/asdf/quux.html','.html');
console.log(str);
//返回文件的名称 如果添加第二个参数‘.html’ 则返回quux;
dirname
返回的是文件的目录名称
let res = path.basename('http://www.baidu.com/foo/bar/baz/asdf/index.html');
console.log(res); //index.html
extname
返回文件的扩展名
let res = path.extname('http://www.baidu.com/foo/bar/baz/asdf/index.js');
console.log(res); //.js

url模块

parse
  		protocol:协议
host:域名
search:参数
query:?后面的参数
pathname:路径
href:url链接 let str = url.parse('http://www.baidu.com:80/images/index.php?a=100');
console.log(str); /*
Url {
protocol: 'http:',
slashes: true,
auth: null,
host: 'www.baidu.com:80',
port: '80',
hostname: 'www.baidu.com',
hash: null,
search: '?a=100',
query: 'a=100',
pathname: '/images/index.php',
path: '/images/index.php?a=100',
href: 'http://www.baidu.com:80/images/index.php?a=100' }
*/
format
   const result = url.parse(参数1):返回值是一个urlobject
const newUrl = url.format(result):根据urlObject生成一个url let res = url.parse('http://www.baidu.com:80/images/index.php?a=100');
let str = url.format(res);
console.log(str) //http://www.baidu.com:80/images/index.php?a=100
resolve
替换域名后第一个/后的内容
const str = url.resolve('/one/two/three','four');
console.log(str); //one/two/four const str = url.resolve('/one/two/three','/four');
console.log(str); //全部替换(第一个/开始) /four

http开启服务

    const http = require('http');
//http 中得 createserver() 方法 参数为一个回调
//回调里面有两个参数 第一个参数 : request (请求) 第二个参数 ;responese (响应);
const server = http.createServer( (request,responese) => {
//设置响应头
//状态码得设置 200
//数据得类型
//内容类型:text/plain 会将html标签进行转义,原样输出
//如果设置为text/html 会解析成html标签
//writeHead() 第一个参数为状态码 第二个参数为一个对象
responese.writeHead(200,{"content-type":'text/html;charset=utf-8'}); //设置后端向客户端响应得内容
responese.write('<h2>后端响应到客户到得信息</h2>'); //响应结束
responese.end();
} )
//设置端口号: .listen()
server.listen(8080);
console.log('server running at http://127.0.0.1:8080');

路由

路由是根据不同的 url 地址展示不同的内容或页面

前端路由

rutor 适合做单页面开发

后端路由 :

根据客户端请求的地址不同 , 响应到客户端的数据也是不一样额

const http = require('http');
const url = require('url'); const server = http.createServer( (req,res) => {
//设置相应
res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
//获取客户端请求的地址
let myUrl = url.parse(req.url).pathname;
//服务端根据客户端请求地址的不同。响应不同的数据
if(myUrl != '/favicon.ico'){
//地址判断
switch(myUrl){
case '/login':
//响应登陆信息
res.write('<h2>您好请登录</h2>');
break;
case '/register':
res.write('<h2>您好请注册</h2>');
break;
case '/xxx':
res.write('<h2>您好,xxx</h2>');
break;
}
} res.end();
} )
//设置端口号'
server.listen(8888);
console.log('server running at http://127.0.0.1:8888');

node基础 day1的更多相关文章

  1. node基础篇二:模块、路由、全局变量课堂(持续)

    今天继续更新node基础篇,今天主要内容是模块.路由和全局变量. 模块这个概念,在很多语言中都有,现在模块开发已经成为了一种潮流,它能够帮助我们节省很多的时间,当然咱们的node自然也不能缺少,看下例 ...

  2. 计算机基础-Day1

    计算机基础-Day1 一.计算机基础 首先Python是一门编程语言 语言: 那什么是语言?语言就是一种事物与另一种事物沟通的介质. 所以说编程语言是程序员跟计算机沟通的介质,那么为什么要跟计算机沟通 ...

  3. python计算机基础-Day1

    计算机基础-Day1 一.计算机基础 首先Python是一门编程语言 语言: 那什么是语言?语言就是一种事物与另一种事物沟通的介质. 所以说编程语言是程序员跟计算机沟通的介质,那么为什么要跟计算机沟通 ...

  4. node基础-文件系统-文件写操作

    文件操作频率最高的就是读跟写.nodejs的文件的读取API在<node基础-文件系统-读取文件>里已经简单介绍过,本文就简单介绍下nodejs的文件写API. nodejs的文件操作均提 ...

  5. Node基础篇(文件操作)

    文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...

  6. node基础01:简要介绍

    1.node vs php 优点 性能高(机制问题) 开发效率高(省了不少优化的事) 应用范围广(可以开发桌面系统,electron框架) 缺点 新,人少 中间件少 IDE不完善 2.node的劣势和 ...

  7. Node基础:域名解析DNS(ok)

    写在前面 Nodejs学习手册,基础总结之DNS模块.对从事web开发的同学来说,DNS解析再熟悉不过,在nodejs中也有一个模块可以完成dns解析的工作,使用非常简单.直接进入主题. 域名解析:d ...

  8. node基础 --全局

    全局对象: global:永远使用var 定义变量以避免引入全局变量; process:所有全局执行上下文的内容都在process对象中: 模块和包: 模块:一个Node.js 文件就是一个模块,这个 ...

  9. IOS基础 Day-1手动内存管理

    辞职回家打算自学IOS开发,就在借个地方记录一下 Day-1      手动内存管理                   主要内容:release  retain必须配对好,不然会占用内存 慢慢积累导 ...

随机推荐

  1. max count混合使用

    SELECT MAX(a1.人数) FROM (SELECT COUNT(category_id) AS "人数",category_id FROM course_category ...

  2. Nginx模块讲解

    Nginx模块分为:nginx官方模块.第三方模块 通过nginx -V查看编译参数,可以看到官方编译的模块 --with-compat --with-file-aio --with-threads ...

  3. Docker + node(koa) + nginx + mysql 线上环境部署

    在上一篇 Docker + node(koa) + nginx + mysql 开发环境搭建,我们进行了本地开发环境搭建 现在我们就来开始线上环境部署 如果本地环境搭建没有什么问题,那么线上部署的配置 ...

  4. ORM基础2 字段及其参数和meta

    一.ORM简介 1.概念:ORM(Object Relational Mappingt ),对象关系映射 2.实质:类与数据库之间的映射 3.优点: 开发人员不用写数据库 4.缺点: 开发人员,数据库 ...

  5. Qt Installer Framework翻译(5-1)

    创建离线安装程序 脱机安装程序在安装过程中根本不会尝试连接在线存储库.但是,元数据配置(config.xml)使用户可以在线添加和更新组件. 在公司防火墙不允许用户连接到Web服务器的情况下,脱机安装 ...

  6. AttributeError: 'Table' object has no attribute 'plot'错误

    今天在用到camelot爬取pdf的表格时,想选取部分区域进行爬取,就想用plot把pdf画一下,选个坐标. 看了网上的示例,在使用camelot.read_pdf获取当前页面以后调用tables[0 ...

  7. python模拟鼠标拖动操作的方法

    本文实例讲述了python模拟鼠标拖动操作的方法.分享给大家供大家参考.具体如下: pdf中的书签只有页码,准备把现有书签拖到一个目录中,然后添加自己页签.重复的拖动工作实在无趣,还是让程序帮我实现吧 ...

  8. 编写python程序读入1到100之间的整数,然后计算每个数出现的次数,输入0表示结束输人,输入数据不包括0。如果数出现的大现如果大于1,输出时使用复数times

    #-*- coding:UTF-8 -*- #环境:python3 print("Enter the numbers between 1 and 100:") enterList= ...

  9. 深入Node.js的进程与子进程:从文档到实践

    欢迎关注Github仓库,这是一个自2018年起持续更新的前端&算法开源博客.目前已有node学习.js面试笔记.css3动画设计.webpack4系列教程.设计模式.剑指offer·js版等 ...

  10. springcloud ActiveMQ设置多个并行消费者

    还是结合实际项目说把,最近在做跟保险公司和第三方借贷平台对接的项目: 其中需要第三方借贷平台借款并和保险挂对勾,也就是每次借钱的时候可以做一次保: 这里面正常情况下的逻辑场景: 借贷平台:借贷审核通过 ...