涉及以下这些内容:

  1. 主体、
  2. cookie、session
  3. 数据
  4. 模板引擎

服务器基本结构:

const express=require('express');
const static=require('express-static');
const cookieParser=require('cookie-parser');
const cookieSession=require('cookie-session');
const bodyParser=require('body-parser'); //只能解析一般的post数据,不能解析post文件
const ejs=require('ejs');
const jade=require('jade');
var server=express();
server.listen(8080); //1. 解析cookie
server.use(cookieParser('goreafspoibuodds'));
// 2. session
var arr=[];
for(var i=0;i<100000;i++){
arr.push('keys_'+Math.random());
}
server.use(cookieSession({name:'张雯_sess_id',keys:arr,maxAge:20*3600*1000})); // 3.post
server.use(bodyParser.urlencoded({extended:false})); //不用扩展模式(extended:false) //用户
server.use('/',function(req,res,next){
console.log(req.query,req.body,req.cookies,req.session);
}); // 4.static
server.use(static('./www'));
body-parser 不够好 因为它只能解析一般的post数据,不能解析post文件.

如果要上传文件,然后读取文件的相关数据改怎么办?

html:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<!-- 普通的post表单不能上传文件,只能用一个东西:enctype -->
<!-- multipart/form-data 把表格的真实数据分割后上传 -->
<form action="http://localhost:8080/" method="post" enctype="multipart/form-data">
文件:<input type="file" name="f1" /><br>
<input type="submit" value="上传">
</form>
</body>
</html>

nodejs:

const express=require('express');
const bodyParser=require('body-parser');
const multer=require('multer');
// 想要上传文件,首先要又个multer对象
var objMulter=multer(); var server=express(); // 错误.bodyParser.urlencoded对应的form表单的enctype类型必须也是urlencoded
// server.use(bodyParser.urlencoded({encoded:false})); server.use(objMulter.any()); server.post('/',function(req,res){
// console.log(req.body); 只能存储我们的用户名之类的
console.log(req.files); //可以用来存储文件
}); server.listen(8080);

注意:

1.enctype一共有三种类型:

2.multer有一些参数.比如any,意思是可以接收任何文件



比如single,意思是只能接收指定文件

执行结果:

nodejs的中间件Multer的可选参数

文件信息(file information):上传后的文件具有如下属性
fieldname: 上传文件标签在表单中的name
originalname:文件在用户电脑上的文件名
Encoding:该文件的编码
mimetype:该文件的Mime type
size:该文件的字节数
destination:该文件要保存的文件夹
filename:在保存的文件夹下的文件名
path:文件上传后保存的完整路径
buffer:完整文件的buffer

接下来要借助这些参数完成的工作:

1.存完之后会发现,文件名没有后缀.这时候我们需要补上它原来的后缀名

2.把文件存放到指定的文件中去

如果要改文件名字,需要用到fs.rename()的功能:

const path=require('path');
const fs=require('fs');
var str='c:\\wamp\\www\\a.html'; var obj=path.parse(str); //base 文件名部分
//ext 扩展名部分
//dir 路径部分
//name 文件名部分
console.log(obj.ext); //看看文件的后缀名是啥.. fs.rename('a.txt','b.txt',function(err){ //把a.txt改名为b.txt
if(err){
throw err;
}
console.log('done!');
});

总体的js文件:

const express=require('express');
const bodyParser=require('body-parser');
const multer=require('multer');
const fs=require('fs');
var pathlib=require('path'); // 想要上传文件,首先要又个multer对象
var objMulter=multer({dest:'./www/upload/'}); var server=express(); // 错误
// server.use(bodyParser.urlencoded({encoded:false}));
server.use(objMulter.any()); server.post('/',function(req,res){
// console.log(req.body); 只能存储我们的用户名之类的
console.log(req.files); //可以用来存储文件 // 获取原来文件的扩展名
// 修改它的扩展名
var newName=req.files[0].path+pathlib.parse(req.files[0].originalname).ext; fs.rename(req.files[0].path,newName,function(err){
if(err)
res.send('上传失败');
else
res.send('成功');
}); }); server.listen(8080);

express实践(一)的更多相关文章

  1. express 实践

    截图: 这个项目的数据是根据之前瓜子网爬虫爬的北京区数据 express + mongodb + pug(jade) + flex.css: 项目地址: https://github.com/uust ...

  2. nodejs 实践:express 最佳实践 (一)

    express 最佳实践 (一) 最近,一直在使用 nodejs 做项目,对 nodejs 开发可以说深有体会. 先说说 nodejs 在业务中的脚色,, 在 web同构 方面, nodejs 的优势 ...

  3. nodejs 实践:express 最佳实践 (一) 项目结构

    express 最佳实践 (一) 第二篇: express 最佳实践(二):中间件 最近,一直在使用 nodejs 做项目,对 nodejs 开发可以说深有体会. 先说说 nodejs 在业务中的脚色 ...

  4. express 最佳实践(二):中间件

    express 最佳实践(二):中间件 第一篇 express 最佳实践(一):项目结构 express 中最重要的就是中间件了,可以说中间件组成了express,中间件就是 express 的核心. ...

  5. nodejs 实践:express 最佳实践(四) express-session 解析

    nodejs 实践:express 最佳实践(四) express-session 解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs ...

  6. vue实践---vue配合express实现请求数据mock

    mock数据是前端比较常见的技术,这里介绍下vue配合express 实现请求数据mock. 第一步: 安装 express :  npm install express -D 第二步: 简历需要mo ...

  7. nodejs 实践:express 最佳实践系列

    nodejs 实践:express 最佳实践系列 nodejs 实践:express 最佳实践(一) 项目结构 nodejs 实践:express 最佳实践(二) 中间件 nodejs 实践:expr ...

  8. 开始nodejs+express的学习+实践(1)

    开始nodejs+express的学习+实践(1) 开始nodejs+express的学习+实践(2) 开始nodejs+express的学习+实践(3) 开始nodejs+express的学习+实践 ...

  9. nodejs 实践:express 最佳实践(二) 中间件

    express 最佳实践(二):中间件 第一篇 express 最佳实践(一):项目结构 express 中最重要的就是中间件了,可以说中间件组成了express,中间件就是 express 的核心. ...

随机推荐

  1. springboot 整合 MongoDB 实现登录注册,html 页面获取后台参数的方法

    springboot简介: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不 ...

  2. RedissonLock分布式锁源码分析

    最近碰到的一个问题,Java代码中写了一个定时器,分布式部署的时候,多台同时执行的话就会出现重复的数据,为了避免这种情况,之前是通过在配置文件里写上可以执行这段代码的IP,代码中判断如果跟这个IP相等 ...

  3. TCP/IP NAT知识梳理

    一. IP地址的获取 首先,互联网上的每台主机都有一个唯一的IP地址标识,计算机在通信时需要向网络中的DHCP(动态主机配置协议)服务器申请一个IP地址,但开始主机并不知道哪台机器是DHCP服务器(不 ...

  4. selenium webdriver 使用Chrome 浏览器

    首先需要有ChromeDriver驱动来协助.ChromeDriver是实现WebDriver有线协议的一个单独的服务.ChromeDriver通过chrome的自动代理框架控制浏览器,ChromeD ...

  5. String类详解

    看了很多文章事实证明之前的通过new创建String对象只有一个是错误的,实际上创建一个或者创建两个对象,一个在堆区,一个在常量池,当常量池中已经存在就不会创建.看了一篇非常好的文章http://ww ...

  6. for..of与for..in

    var arr=[1,2,3,5] undefined for(var m of arr) console.log(m)//1,2,3,5 for(var m in arr) console.log( ...

  7. MYSQL数据库学习六 索引的操作

    6.1 索引 由于数据存储在数据库表中,所以索引是创建在数据库表对象上的,由表中的一个或多个字段生成的键组成,这些键存储在数据结构(B-树或哈希表)中,通过索引可以快速有效地查找与键值相关联的字段.根 ...

  8. #Python3.6.2(32位) pip安装 和 pygame 环境配置

    #首先确认电脑已经安装python ,可通过在命令行下 执行 python --version确认. 1. 到 https://pypi.python.org/pypi/setuptools/ 下载 ...

  9. Linux中SVN的备份与恢复

    linux中SVN备份有三种方式 1.svnadmin dump 是官方推荐的备份方式,优点是比较灵活,可以全量备份也可以增量备份,并提供版本恢复机制. 缺点是版本数过大,增长到数万以上,那么dump ...

  10. Bate敏捷冲刺每日报告--day3

    1 团队介绍 团队组成: PM:齐爽爽(258) 小组成员:马帅(248),何健(267),蔡凯峰(285)  Git链接:https://github.com/WHUSE2017/C-team 2 ...