node实战小例子
第一章 2020-2-6 留言小本子
思路(由于本章没有数据库,客户提交的数据放在全局变量,接收请求用的是bodyParser,
padyParser使用方法
app.use(bodyParser.urlencoded({extended:false }))
设置全局方法
在express框架中
________________________________
let entries = [];
app.localls.entries=entries;
_____________________________________
在收到请求的数据路由中增加到全局数组 示例代码:
entries.push({
title :req.body.title,
content:req.body.content,
published: new.Date()
})
处理提交数据前得验证一下是否有数据,示例代码
if(!req.body.title || ! req.body.contont){
// res.statue(400).send('数据为空也返回');
return;
}else{
//处理得到数据后的逻辑
}
增加完成后跳到展示页需要用到重定向:
res.redirect('/')
_______________________________________________________
而这个时候有数据了,怎么填充到模板呢?示例代码
<% if(entries.length){ %>
<%
//备注entries 是后台的全局一个对象,可以用forEach遍历数组,但是不要用ec6语法 具体遍历后的对像放在参数
//中 ,这里参数是entry,ejs模板中脚本部份是<%%> 而数据则用<%= %>
entries.forEach(function(entry){
})%>
<div><%=entry.title%>
<div><%=entry.content%></div>
<div class="card mg-3">
< %} else{ %>
暂无留言:<a href="/new">去增加一条留言!</a>
} %>
<div>
<div>
————————————————————————————————————————————————
附录图片:
————————————————————————————————————————————————————————
测试环境中,静态页不能post的地址直接写127.0.0.1 否则为D\www\127.0.0.1 该为http://127.0.0.1
示例代码:前端
——————————————————————————————————————————————————————————————————
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<br>
<form action="http://127.0.0.1" method="post">
<label for="user"> 用户名:<input type="text" name="user"></label><br>
<label for="word"> 用户名:<input type="password" name="pass"></label><br>
<input type="submit" value="提交">
</form>
</body>
</html>
————————————————————————————————————————————————————————————————————————————————————————————————
后端代码
————————————————————————————————————————————————————————————————————————————————————————————————————
const http = require('http');
http.createServer((req,res)=>{
let postData = '';
req.on('data',(data)=>{
postData+=data;
console.log(postData);
res.end();
});
}).listen(80,'127.0.0.1',()=>{
console.log('服务器也启动');
});
————————————————————————————————————————————————————————————————————2020-02-10
静态初步:
我们想通过路径区配地址:
const http = require('http');
const url = require('url');
const fs = require('fs');
//不导path 就算路径识别了,也会出现编码错误!
const path = require('path');
const queryString = require('querystring');
http.createServer((req,res)=>{
let pathUrl = url.parse(req.url);
let pathName = pathUrl.pathname;
let postData = {};
if('/index' == pathName){
console.log(__dirname);
// 读取文件的参数第一个是路径,第二个函数
fs.readFile(path.join(__dirname,'static/loing.html'),(err,data)=>{
if(err) throw err;
res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
res.end(data);
})
}
}).listen(80,'127.0.0.1',()=>{
console.log('服务器也启动');
});
______________________________________________________________________________________
bodyparser
原理:
引入的包是自己写的,目前是测试怎么弄一个怎么定义包后加一个属性,以下是引用端 2020-2-11
————————————————————————————————————————————————————————————————————————————————————————————————
const express = require('express');
const bodyparser = require('./zhibodyparser');
var server = express();
var.listen(80);
server.use(bodyParser2.aaa());
server.use('/',function(req,res){
console.log(req.body);
});
——————————————————————————————————————————————————————————————————————————————————————————————
以下是定义端:01
——————————————————————————————————————————————————————————————————————————————————————————————————————————————
const querystring = require('querystring');
module.exports = function (){
return function(req,res,next){
var str='';
req.on('data',function(data){
str+=data;
});
req.on('end',function(){
req.body = querystring.parse(str);
next();
});
}
}
_________________________________________________
以下是定义端:02
const querystring = require('querystring');
module.exports = {
//目是是让module.express是一对象,对象的aaa是一个函数
aaa:function(){
return function(req,res,next){
var str='';
req.on('data',function(data){
str+=data;
});
req.on('end',function(){
req.body = querystring.parse(str);
next();
});
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++2020-2-11-18:23(智能社)
cookie 使用
const express = require('express');
const cookieParser = require('cookie-parser');
var server = express();
server.use(cookieParser());
server.use('/',function(req,res){
res.cookie('user','blue');
res.send('ok');
//如果是设置cookie 可以在任何时候res.cookie,但要获取需要cookie-parser中间件
//res.cookie('usde','ssss')获取需要中间件,使用很方便 2020-02-11
console.log(req.cookies);
res.end();
});
server.listen(80);
——————————————————————————————————————————————————————————————————————————————————
综合例子:
--------------------------------------------------------------------------------------
const express = require('express');
const static= require('express-static');
const cookieParser = require('cookie-parser');
const cookieSession = require('cookie-session');
const bodyParser = require('body-parser');
const ejs = require('ejs');
var server = express();
server.use(cookieParser('sadlfkdldlfd'));
var arr = [];
for(var i = 0; i<10000; i++){
arr.push('deys_'+Math.random());
}
server.use(cookieSession({name:'aaa',keys:arr, maxAge: 20*3600*100}));
server.use(bodyParser.urlencoded({extended:false}));
server.use('/',function (req,res,next) {
res.cookie();
console.log(req.query,+req.body,req.cookies,req.session);
res.end();
});
server.use(static('./www'));
server.listen(80);
——————————————————————————————————————————————————————————————————————————2020-2-12
以上方法不能上传文件,,上传文件需要插件 multer 智能社的方法,和昭山欢用的插件不一样
示例代码:
——————————————————————————————————————————
const express = require('express');
const bodyParser = require('body-parser');
const multer = require('multer');
var server = express();
server.use(bodyParser.urlencoded({extended: false}));
var objMulter = multer();
//objMulter接收name为指定的,而any();接收任意的
server.use(objMulter.single('f1'));
server.use(objMulter.any());
server.post('/',function(req,res){
cosole.log(req.body);
//用了multer 会多了一个req.files属性
});
server.listen(80);
返回的结果是:
可以看出文件是二进制,说明文件在在内存,,这个时候可以设置保存路径;
var objMulter = multer({dest: './www/'});
完整代码如下:附图上传后后台console.log(
const express = require('express');
const bodyParser = require('body-parser');
const multer = require('multer');
var server = express();
server.use(bodyParser.urlencoded({extended: false}));
var objMulter = multer();
//设置目录后可以不用保存到内存
var objMulter = multer({dest: './www/'});
server.use(objMulter.single('f1'));
server.use(objMulter.any());
server.post('/',function(req,res){
cosole.log(req.files);
});
server.listen(80);
)
const express = require('express');
const bodyParser = require('body-parser');
const multer = require('multer');
var server = express();
server.use(bodyParser.urlencoded({extended: false}));
var objMulter = multer();
//设置目录后可以不用保存到内存
var objMulter = multer({dest: './www/'})'' server.use(objMulter.single('f1'));
server.use(objMulter.any()); server.post('/',function(req,res){
cosole.log(req.body); });
server.listen(80);
文件名是这样子,需要改名:改名之前需要复习一下path包
const path = require('path');
var str = "c;\\wamp\\www\a.html";
var obj = path.parse(str);
console.log(obj);
//将返回base 文件名 ext 扩展名 path 全路径 pathname除了文件名的部份共 四个部份
怎么改名呢,第一上面图片中path是文件路径 扩展名可以用path来获取
新路径等于:
var newname = req.files[0].path+path.ext(req.files[0].files[0].originalname);
fs.reneame(req.files[0].path,bewName,function(err){
if(err)
res.send("上传失败");
else
res.send(‘上传成功')
})
node实战小例子的更多相关文章
- Python-正则表达式及实战小例子
注意Python的字符串本身也用'\'转义,所以要特别注意,一般我们都建议使用Python的r前缀,就不用考虑转义的问题了 1,行的起始 例子:匹配‘cat’ 开头 patt=re.compile( ...
- iOS开发——UI进阶篇(十六)Quartz2D实战小例子
一.画线 只有在drawRect中才能获取到跟view相关联的上下文 - (void)drawRect:(CGRect)rect {} 一条线 // 1.获取跟当前View相关联的layer上下文(画 ...
- 我的node+express小例子
启动index.js: var express = require("express"); var path = require("path"); var op ...
- 【zTree】 zTree使用的 小例子
使用zTree树不是第一次了 但是 还是翻阅着之前做的 对照着 使用起来比较方便 这里就把小例子列出来 总结一下使用步骤 这样方便下次使用起来方便一点 使用zTree树的步骤: 1.首先 在 ...
- Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子
Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子 第一个例子都是比较简单的博客园登录界面,就像学习编程语言时候都是从Hello,World!开始. 1 ...
- Vue2.x源码学习笔记-从一个小例子查看vm实例生命周期
学习任何一门框架,都不可能一股脑儿的从入口代码从上到下,把代码看完, 这样其实是很枯燥的,我想也很少有人这么干,或者这么干着干着可能干不下去了. 因为肯定很无聊. 我们先从一个最最简单的小例子,来查看 ...
- 【转】 Pro Android学习笔记(九七):BroadcastReceiver(1):基础小例子
目录(?)[-] 基础小例子 发送Broadcast intent 运行情况 应用间的广播 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog ...
- 试试 IEnumerable 的另外 6 个小例子
IEnumerable 接口是 C# 开发过程中非常重要的接口,对于其特性和用法的了解是十分必要的.本文将通过6个小例子,来熟悉一下其简单的用法. <!-- more --> 阅读建议 在 ...
- springmvc入门的第一个小例子
今天我们探讨一下springmvc,由于是初学,所以简单的了解一下 springmvc的流程,后续会持续更新... 由一个小例子来简单的了解一下 springmvc springmvc是spring框 ...
随机推荐
- oracle、postgres、mysql数据库的建库、创建用户、导人导出备份总结
本文包含的内容:使用命令操作oracle.postgres.mysql的导入导出,登录到数据,创建用户 注:我在公司使用的是Center OS操作系统,所以oracle和postgres均是在Linu ...
- Linux进程理解与实践(二)僵尸&孤儿进程 和文件共享
孤儿进程与僵尸进程 孤儿进程: 如果父进程先退出,子进程还没退出那么子进程的父进程将变为init进程.(注:任何一个进程都必须有父进程) [cpp] view plaincopy #include & ...
- Rip CD on Ubuntu
用Mint自带的banshee可以把CD转换为ogg文件,[Media -> Import Media],然后选择Audio CD,但只能转换为ogg格式,好像不能自动获取ID3标签:比较好的方 ...
- Linux 内核预备知识:浅析 offsetof 宏以及新手的所思所想
最近一头扎进了 Linux 内核的学习中,对于我这样一个没什么 C 语言基础的新生代 Java 农民工来说实在太痛苦了.Linux 内核的学习,需要的基础知识太多太多了:C 语言.汇编语言.数据结构与 ...
- Python语言系列-06-面向对象1
楔子 #!/usr/bin/env python3 # author:Alnk(李成果) # 人狗大战例子引入面向对象 # 版本1 def hero(name, sex, hp, ce, level= ...
- 【笔记】浅谈支持向量机(SVM)
SVM支持向量机 支持向量机的思想原理 使用支持向量机的思想,既可以解决回归问题,又可以解决分类问题 那么支持向量机的思想是什么? 已经知道逻辑回归这种算法的本质就是在一个平面中寻找决策边界,而分类算 ...
- 005 媒体访问控制(MAC,Media Access Control)
一,MAC MAC是媒体访问控制器.以太网MAC由IEEE-802.3以太网标准定义.它实现了数据链路层.最新的MAC同时支持10/100/1000Mbps速率.通常情况下,它实现MII/GMII/R ...
- vue项目中踩过的element的坑
前言:在现在这种大的社会背景下,人们的需求更加的个性化了,而之前为了解放开发复杂的原生开发状态,现有的组件库已经远远不能满足人们高质量的需求了,这两天开发发现了一些element UI交互上的缺陷,当 ...
- DFT、DTFT、DFS、FFT之间的关系
DFT.DTFT.DFS.FFT.FT.FS之间的关系 FT和FS是研究连续信号的,在数字信号处理中不涉及. 主要是前四种的关系: DFT(Discrete Fourier Transform):离散 ...
- 你真的熟悉ASP.NET MVC的整个生命周期吗?
一.介绍 我们做开发的,尤其是做微软技术栈的,有一个方向是跳不过去的,那就是MVC开发.我相信大家,做ASP.NET MVC 开发有的有很长时间,当然,也有刚进入这个行业的.无论如何,如果有人问你,你 ...