node.js学习(http://nodejs.cn/api/

一、十次方前端

image.png

1:十次方需求分析

其中包含(头条、问答、交友、活动、吐槽、招聘)每个功能模块的讲解
image.png

2.前后端分离

image.png
image.png

3.node.js的学习应用

相当于后端的jre(就是一个前端的环境,是一个运行在服务器的javascript)
安装完成之后验证:cmd输入:node -v(检测相应的版本信息)
创建node,保存为任意格式,cmd进入到该文件的位置,然后node 文件名,在浏览器上面输入localhost:8888

  1. //创建web服务器
  2. var http=require('http');
  3. http.createServer(function (request,response){
  4. //发送http头部
  5. //hhtp状态值:200:ok
  6. //内容类型:text/plain
  7. response.writeHead(200,{'Content-Type':'text/plain'});
  8. for(var i=0;i<10;i++){
  9. response.write('Hello World\n');
  10. }
  11. response.end('');
  12. }).listen(8888);
  13. //终端打印信息
  14. console.log('Server runing at http://127.0.0.1:8888/');

4.NPM包资源管理器(相当于前端的maven)

版本:npm -v(cmd中)
npm init(在当前目录输入npm init直接一直回车会出现一个package.json文件)
npm install express安装一个web框架(可以全局安装也可以部分安装,安装的文件里面有依赖jar)
4.1查看全局安装的路径和如何全局安装(xxx -g):
image.png

4.2:批量下载

首先我们把相应的测试代码工程拷贝到目录里面(本次的代码是day03的代码)
下载之后解压到文件目录
image.png
然后cd到admin:npm install(批量下载:可以安装package.json里面的所有js库这个下载太慢了用淘宝的下载)
image.png

进入admin目录:
npm install -g cnpm —registry=https://registry.npm.taobao.org(安装全局镜像)
cnpm -v
cnpm install(安装库)

4.3:运行工程:cnpm run dev

4.4:webpack的介绍和安装(使用全局安装npm和cnpm都行后者使用淘宝镜像比较快)

前端资源的加载和打包的工具
image.png
https://www.webpackjs.com/(仅仅使用与js打包)
新建一个目录:安装webpack:cnpm install webpack -g
image.png
webpack的4.0之后还得安装:cnpm install webpack-cli -g(之前是和上面整合在一起)
打包使用的命令:webpack
js打包过程:先在webpack下面目录下创建目录:(我的版本冲突不知道啥情况没成功)
image.png
然后用notepad++创建三个js保存在src下面

//bar.js
exports.info=function(str){
   document.write(str);
}


//logic.js
exports.add=function(a,b){
    return a+b;
}

//main.js
var bar= require('./bar');
var logic= require('./logic');
bar.info( 'Hello world!'+ logic.add(100,200));

在创建一个webpack.conf.js(在src的同级目录)
var path = require(“path”);
module.exports = {
entry: ‘./src/main.js’,
output: {
path: path.resolve(__dirname, ‘./dist’),
filename: ‘bundle.js’
}
};
但是我的有问题:
以上代码的意思是:读取当前目录下src文件夹中的main.js(入口文件)内容,把对应的js文件打包,打包后的文件放入当前目录的dist文件夹下,打包后的js文件名为bundle.js
4.5:css打包
cnpm install style-loader css-loader —save-dev
image.png

4.5:VsCode的开发工具
轻量的开发软件不仅可以用来开发前端js等,还可以使用C、python、PHP
安装:官网下载安装
4.6:ECS6
image.png

5.API文档与模拟数据接口:

5.1:Restful架构:表现层状态转化;主要用于web接口的设计

image.png
综合上面的解释,我们总结一下什么是RESTfu架构:
(1)每一LURI代表一种资源:
(2)客户端和服务器之间,传递这种资原的某种表现层:
(3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现”表现层状态转化”。

5.2:使用Swagger来编写API:

SwaggerEditor开发工具的安装和启动:
使用npm命令运行(先全局安装在运行软件)
image.png

SwaggerUI的安装和开发

5.3Mock.js

Mock.js是用来模拟生成数据的js库
安装mock.js
image.png
然后打开VS编写代码

5.4:easyMock(https://www.easy-mock.com/

image.png

6:使用ElementUI开发管理后台

https://panjiachen.github.io/vue-element-admin-site/zh/guide/#功能
6.1:根据脚手架快速搭建
image.png

6.2:规范编程
6.2.1:找到上面下载的文件打开index.js进行修改
image.png
6.2.2:国际化设置改成中文设置:打开main.js

image.png
6.2.3:
image.png
登录的时候回验证src里面的login.js里面的请求
6.2.4:通过使用easymock来改写接口访问

7.路由与状态管理

7.1:路由介绍

image.png

7.2:路由安装

https://cn.vuejs.org/
image.png
image.png

7.4:路由标签的学习

image.png

8:网站前台-活动模块的招聘

8.1:服务端渲染技术:SSR

image.png

8.2:NUXT服务器渲染技术(重要)

https://nuxtjs.org/examples/async-data

二、后端微服务的学习

1、十次方的项目架构:(前后端分离)

后端目前基本上都是由java写的,每个功能都可以看做是一个个的微服务
image.png

1.1:建模(powerdesigner设计数据库)UML

主要用来谈项目和客户之间沟通

2:系统构架

springboot+springcloud+springmvc+springdata(替代mybatis)(全家桶)

2.1:搭建父子工程(idea)

get查询(安全且幂等,安全:不会产生藏脏读等。幂等:在操作成功的前提下不会对数据库产生不好的影响)
post添加(不安全不幂等)put更新(不安全幂等)delete删除(不安全幂等)

docker镜像配置搭建微服务环境。密码:主机IP:192.168.179.20 root/itcast

1、创建并启动mysql容器
docker run -di —name=tensquaare_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7
开通之后可以使用本地的mysql新建连接密码是root ip:192.168.179.20
然后本地开始建立数据库的表结构

2.3:idea的配置(jdk、maven、tomcat)

-DarchetypeCatalog=internal
设置参数二次下载直接找本地,下载速度快
image.png
步骤搭建工程:

2.3.1:父级工程的建立

判断父工程的pom文件是否需要
image.png
当我们在模板不用pom的时候选择下面的ex然后创建工程
image.png

创建带有pom的父工程
image.png
image.png
父工程不写代码,只需要留一个pom的文件,可以删除src和java的目录。
image.png

修改pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.tensquare</groupId>
    <artifactId>tensquare_parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>tensquare_parent</name>
    <description>十次方项目-黑马程序员</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

</project>

2.3.2创建公共子模块(tensqure_common)

image.pngimage.png
image.png
image.png
都在公共子模块common里面创建。接着创建返回结果的实体类(前端会传递一些json的数据,后端返回的也是一些json的数据,这时候我们学院创建一个javabean的对象使用注解respondbody)
1、实体类result(因为data的数据有可能是list集合也可能是javabean所有使用object)

2.pageresult(由于有时候有分页数据导致data里面的数据有total和一个javabean,这时需要在定义一个分页的返回结果)
3.statecode(定义一个状态码的返回类)

4.由于数据库的生产环境需要分布部署,所以建立一个分布部署id
由于我们的数据库在生产环境中要分片部署(MyCat),所以我们不能使用数据库本 身的自增功能来产生主键值,只能由程序来生成唯一的主键值。我们采用的是开源的 twitter( 非官方中文惯称:推特.是国外的一个网站,是一个社交网络及微博客服务) 的 snowflake (雪花)算法
分布式的时候不能使用主键自增,因为id会一样导致操作一张表的时候可能会出错
util工具类:IdWorker(1)【十次方禁广告闲聊讨论群863676367】.java

2.3.3搭建微服务(tensquare_base)

不建议使用模板修改pom的文件

运行程序http://localhost:9001/label
遇到了无法生成application.yml的问题
代码生成器
增删改我们需要在dao里面加上@Modifying否则报错

创建redi缓冲容器:

当我们一直使用查询语句的时候对数据产生很大的压力,这个时候我们考研使用redis缓冲器
docker images
docker run -id —name tensquare_reids -p 6379:6379 redis
1、导maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、指定redis
redis:
host: 192.168.179.20
3、修改方法
常用的redis的api
image.png

使用spring cach缓存

在aplication里面加上:@EnableCaching
然后在service的findbyid里面添加@Cacheable(value = “gathering”,key = “#id”)
update:@CacheEvict(value = “gathering”,key = “#gathering.id”)
delete:@CacheEvict(value = “gathering”,key = “#id”)
一般在项目中使用findbyid都需要缓存,而且修改和删除的service需要把缓存删除

单点登录:就是指我一次登陆在分布式模块任何一个都可以用(无状态的jwt)

然后使用mongodb把吐槽相关的数据存储到里面:

linux:创建一个mongo的容器
docker run -id —name=tensquare_mongo -p 27017:27017 mongo
然后在cmd里面输入mongo 192.168.179.20就可以连接到linux创建的容器