express实践(一)

时间:2023-03-09 00:00:50
express实践(一)

涉及以下这些内容:

  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一共有三种类型:

express实践(一)

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

express实践(一)

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

执行结果:

express实践(一)

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);