node服务端
一,node起服务+数据交互+中间件
什么是node express koa
node是js在后端运行时的一个环境
express,koa是基于node的框架,快速构建web应用
前后端交互方式
1.短链接:ajax
前端主动发请求,不发不回,不主动回,请求数据量大
2.长链接:websocket (像微信,上线通知的功能等等...)
全双工,前端和后端简历链接后,一直维持联系,没有请求,需要有心跳机制维护链接
跟字节打交道(进制,二进制,十进制...)
前后端分离方式
并行开发
创建简单的node服务
npm init -y 创建package.json文件
安装依赖包
1 npm i express body-parse
express: 基于node的框架
body-parser: 用于http请求的body解析
路由
web框架都有路由,mvc(m:Module 数据,c:Controller 控制器,v:View 视图)

jade -- 前端模板,类似于vue template
express + jade 就是mvc
定义不同的请求地址,在项目中对接口进行封装
中间件
可以理解成vue中的全局前置守卫,router.beforeEach()
拦截的作用,前端请求到后端,中间的拦截(例如token,权限验证)
替换的作用,例如发送的一些不文明用于,处理替换成**
记录日志请求
新建文件夹node,新建文件node_express.js文件,
打开终端,npm init,生成package.json,
运行 node node_express.js,访问localhost:3000即可
1 var express = require("express")
2 const bodyParser = require("body-parser")
3 var router = express.Router()
4
5 // 实例化express
6 var app = express()
7
8 //配置bodyparser 解析的作用 固定写法
9 app.use(bodyParser.json()) //解析json
10 app.use(bodyParser.urlencoded({ extended: true })) //解析表单数据
11
12 //日志中间件
13 app.use(async (req, res, next) => {
14 console.log('1.日志中间件开始')
15 if (req.query.content) {
16 req.query.content = req.query.content.replace("二逼", '**')
17 }
18 await next()
19 console.log('3.日志中间件结束')
20 })
21
22
23 //第一种方式 定义接口
24 //定义get接口 req:前端请求 res:响应给前端的数据
25 app.get("/getList", function (req, res) {
26 console.log(req.query, '参数')
27 //返回字符串给浏览器
28 var obj = { name: 'shun' }
29 res.send(obj)
30 })
31
32
33 //第二种方式 定义接口
34 router.get("/api/getList", function (req, res) {
35 console.log('2.改接口日志查询过程中')
36 res.status(200).send({ code: 200, msg: '通过路由定义的接口请求 ', content: "中间件替换不文明用于" + req.query.content })
37 })
38 //添加路由
39 app.use("/", router)
40
41
42 app.listen(3000, function () {
43 console.log('服务已启动,端口3000')
44 })
2,重构express支持模块化及es6支持+框架思想
模块化
启动服务 node express.js(相当于所有的接口写入一个文件中,单文件思想显然不合理)
框架思想--拆开 1,启用的入口 2,框架
--config
--express.js (框架) (到处框架模块)
--server.js
node serve.js
导出模块方式
es6的 export import
node的 module.exports require
## 解决端口不可改问题,使用util工具的promise,并且将app.listen方法暴露出去
支持es6模块化(使用es6语法)
上面一直使用 module.exports require 的形式
我们换成es6的export default import 的形式会发现报错了
安装babel语法转换
npm i babel-cli babel-parset-env babel-plugin-add-module-exports
配置.babelrc文件
{
"presets": ["env"],
"plugins": ["add-module-exports"]
}
跨域

cookie(浏览器) - session(服务器)
客户端小王 --- 浏览器访问 --- 京东
客户端小李 --- 浏览器访问 --- 京东
同一个浏览器
当不同用户登录成功后,服务端会将cookie返回给客户端,客户端通过浏览器携带cookie并发送请求,到达服务端后服务端和 sessionId比较,来区分
通过会话cookie -- session 识别不同用户,也就是说cookie和session是一一对应的,只不过cookie会在cookie客户端和服务端之间来回穿梭

总结:(这个过程自动完成)
- 1,session 在服务器端,cookie 在客户端(浏览器)
- 2,session 默认被存在在服务器的一个文件里(不是内存)
- 3,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
- 4,session 可以放在 文件、数据库、或内存中都可以。
- 5,用户验证这种场合一般会用 session
- 6,chrome >=80版本后 http协议不再携带cookie,仅https支持(强迫使用https协议),但是有个开关
因此,维持一个会话的核心就是客户端的唯一标识,即 session id
框架日志
用于调试
npm i winston
2,配置,控制器,路由抽离
项目可配置性
例如端口的配置(依赖环境变量来设置 )
npm i cross-env
// 系统的常用配置项
const config = {
//先从环境变量中查找port,没有的使用默认3001
port: process.env.PORT || 3001
}
"scripts": {
"start": "cross-env PORT=3002 babel-node server.js"
},
node服务端的更多相关文章
- node服务端搭建学习笔记
咳咳,终于迈出这一步了...这篇文章将是边学边写的真正笔记...用于mark下学习过程中的点滴~ 开篇先把我学习参考的文章来源给出,以表示对前人的尊敬: https://github.com/nswb ...
- Node服务端极速搭建 - nvmhome
本文意在让你掌握极速搭建Node服务端(任何Project) $ whoami name: kelvin email: kelvv@outlook.com homepage: www.kelvv.co ...
- Node服务端极速搭建 -- nvmhome
> 本文意在让你掌握极速搭建Node服务端(任何Project) ```$ whoaminame: kelvinemail: kelvv@outlook.comhomepage: www.kel ...
- node服务端渲染(完整demo)
简介 nodejs搭建多页面服务端渲染 技术点 koa 搭建服务 koa-router 创建页面路由 nunjucks 模板引擎组合html webpack打包多页面 node端异步请求 服务端日志打 ...
- GraphQL-- 使用Apollo Server搭建Node服务端
一.关于Apollo Server Apollo Server是一种使用JS创建GraphQL服务端的一个方案.它的兼容性比较好,可以很好地和GraphQL客户端进行兼容.同时它可以 独立作为服务端进 ...
- vscode远程调试node服务端
{ "type": "node", "request": "attach", "name": &qu ...
- pm2 工具来管理 node 服务端
如下: nodeServer.js 'use strict'; const http = require('http'); const server = http.createServer(funct ...
- 简单的node 服务端 响应get,返回json数据;
原文:http://blog.csdn.net/xn_28/article/details/50837019 const http = require('http'); const hostname ...
- 客户端 jQuery 跨端口 调用 node 服务端
一句话 很顶用 response.setHeader('Access-Control-Allow-Origin', 'http://127.0.0.1:8020'); 说 响应的头文件里设置 一个 h ...
- Node.js 服务端处理图片
Node 服务端处理图片 服务端进行图片处理是很常见的需求,但是Node在这一块相对来说比较薄弱.找了几个比较常见的模块来解决问题. gm GraphicsMagick for node 使用Open ...
随机推荐
- Linux 常用杂项命令
1.查看监听端口的进程名称 lsof -i:[3306] # 3306是端口名称 2.查看PID进程文件的位置 ls -al /proc/51955/exe # 51955是进程PID
- 《Unix/Linux系统编程》第九周学习笔记
<Unix/Linux系统编程>第九周学习笔记 信号和中断 中断"是从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移 到中断处理.与发送给CPU的中断请求一 ...
- word多级标题自动编号设置
1.选择段落 ->多级列表 ->定义新的多级列表 2.级别设置 ,这里操作比较繁琐,要多注意[输入编号的格式]要通过[包含的级别编号来自]这一项目来设定 标题1: 标题2 标题3: 标题4 ...
- 容器之beanfactory抽丝剥茧系列一
1.总所周知,spring ioc功能实现的顶层接口就是BeanFactory.如下面类结构图 这张更加全面: 还有更加变态的 2.BeanFactory为最顶层接口,定义了最核心的需要实现的接口 p ...
- angularJS:一个页面多个ng-app
var app = angular.module('myApp', []); app.controller('myCtrl', function($scope, $rootScope) { $scop ...
- python计算三角形的三个边的边长,首先计算两个坐标点的距离
# -*- coding:utf-8 -*- """ @author: 14931 @file: trianglearea.py @time: 2023/02/14 @d ...
- Xamarin.Android 利用作业计划程序实现ImageSwitcher图片自动定时轮播
在开发android程序时,遇到一个问题,ImageSwitcher只支持手动的切换图片,不支持自动定时的切换.因为xamarin的资料很少,官方也没有相应的教程,所以想到这个方法,利用job程序来实 ...
- tomcat非配置项的策略问题
引用自:http://yaoyan.me/2017/04/Tomcat-config1/ tomcat非配置项的策略问题,参考官方文档:Non-Tomcat setting 大意如下: Tomcat配 ...
- ElasticSearch 实现分词全文检索 - 测试数据准备
目录 ElasticSearch 实现分词全文检索 - 概述 ElasticSearch 实现分词全文检索 - ES.Kibana.IK安装 ElasticSearch 实现分词全文检索 - Rest ...
- Android笔记--SQL
SQL基本语法 基本语法在Python和Java那里都已经重复过了,这里就不再重复了 SQLiteDatabase--SQLite的数据库管理类 主要分为以下3类: 管理类 相关实现: 事务类 数据库 ...