涉及以下这些内容:

  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. python3.5连接oracle数据及数据查询

    今天心血来潮研究下用python连接oracle数据库,看了一下demo,本以为很简单,从操作到成功还是有点坎坷,这里分享给大家,希望为后面学习的童鞋铺路. 一.首先按照cx_Oracle 二:在py ...

  2. MySQL数据库学习二 MSQL安装和配置

    2.1 下载和安装MySQL软件 2.1.1 基于客户端/服务器(C/S)的数据库管理系统 服务器:MySQL数据库管理系统 客户端:操作MySQL服务器 2.1.2 MySQL的各种版本 社区版(C ...

  3. 设计模式 --> (17)状态模式

    状态模式 允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类.它有两种使用情况: (1)一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为. (2)一个操作中 ...

  4. mysql的备份脚本

    mysql的备份脚本 脚本如下 #!/bin/sh # mysql_backup.sh: backup mysql databases and keep newest 5 days backup. # ...

  5. sql操作知识点个人笔记(SQLServer篇)

    实际工作中,总会遇到一些常用的或不常用的sql,这些sql可能并没多少技术含量,但对我们本身而言,一个最大的问题就是很容易忘记.对我个人而言,以前常用的,过阵子之后再用到,发现不记得了.由此得出结论, ...

  6. 数据库数据带&符号 导入有问题的处理办法

    在sql文件头部加个: set feedback off set define off   我们在plsql里面将一条语句导出时会出现以下结果(测试表t_test): prompt Importing ...

  7. JavaOOP-继承

    继承 1.继承的概念 继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似. 继承可以理解为一个类从另一个类获取方法和属性的过程.如果类B继承于类A,那么B ...

  8. beta冲刺5

    昨天的问题: 登陆页面的整合重新制作 各主机版本更迭 我的社团显示功能修改调整 主页的头部替换掉 +修复帖子无法显示内容的问题 +试着将邮箱等判定用正则表达式进行实时判定. 今天的完成: 主要是线下进 ...

  9. 凡事预则立-于Beta冲刺前

    凡事预则立,在Beta开始前的描述 在Beta项目冲刺开始之前,我们小组组织了一次活动室的讨论,明确了一下分工和即将来临的Beta冲刺要处理的问题和需要继续改进的地方.顺带补上一直没有的照片: 针对几 ...

  10. beta冲刺总结-咸鱼

    前言:emmmmmmm冲刺总结应该可以吐槽了?我发誓后面几篇冲刺我是很努力用正经语言描述了!!!!! 心得:emmmmm,说真的--到beta冲刺的时候才是真正感受到了组队的存在,基本上隔三差五就约一 ...