1.node常用框架express
安装
//必须先安装好node
//1cd到想安装的目录(可以先创建好文件夹)
cd F:\lxfwork\node\expdemo
//通过 npm init 命令为你的应用创建一个 package.json 文件。
npm init
//安装 Express 并将其保存到依赖列表中
npm install express --save
//第一个接口index.js
var express = require("express");
var app = express();
app.get("/getdemo",function(req,res){
res.status(200);
res.json({
htmls:10,
csss:5,
jss:4
});
});
app.listen(3000);
//用.filter()方法放回某条数据,下例子返回第一条
var list = [{
id:0,
name:"刘飞",
asks:"怎么选择",
reply:0
},{
id:1,
name:"夏茹",
asks:"怎么回答",
reply:1
}];
app.get("/questions/resolved",function(req,res){
res.status(200);
res.json(list.filter(function(q){
return q && q.reply === 0;
}));
});
express应用生成器
//全局安装express应用生成器(win下用管理员身份开启cmd)
npm install express-generator -g
//设置ejs的模板引擎
express --view=ejs demo1
//进入
cd demo1
//安装依赖
npm install
//启动(win版本)
SET DEBUG=demo1:* & npm start
//启动(mac版本/linux版本)
DEBUG=demo1:* & npm start
express应用生成器生成的 对应结构
express注意点
//添加一个请求路径中指定参数触发的回调函数。函数是对应的回调函数。回调函数的参数依次是req,res和中间件函数next。
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
//ifconfig 在终端查询局域网ip,设置后手机就可以在局域网访问服务器了
//修改express的ip,在www里修改server.listen();后面增加ip地址
server.listen(port,'192.168.125.102');
next中间件(MiddleWare)可以理解为一个对用户请求进行过滤和预处理的东西,它一般不会直接对客户端进行响应,而是将处理之后的结果传递下去。(也是一种函数)。
2express文件上传中间件Multer
Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用于上传文件。它是写在 busboy 之上非常高效。
注意: Multer 不会处理任何非 multipart/form-data 类型的表单数据。
Multer 会添加一个 body 对象 以及 file 或 files 对象 到 express 的 request 对象中。 body 对象包含表单的文本域信息,file 或 files 对象包含对象表单上传的文件信息。
Multer官方文档
//安装
npm install --save multer
//引用
var multer = require('multer');
//demo
var express = require('express')
var multer = require('multer')
var upload = multer({ dest: 'uploads/' })
var app = express()
app.post('/profile', upload.single('avatar'), function (req, res, next) {
// req.file 是 `avatar` 文件的信息,为html中的name,<input type="file" name="avatar" size="50" />
// req.body 将具有文本域数据,如果存在的话
})
app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) {
// req.files 是 `photos` 文件数组的信息
// req.body 将具有文本域数据,如果存在的话
})
var cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])
app.post('/cool-profile', cpUpload, function (req, res, next) {
// req.files 是一个对象 (String -> Array) 键是文件名,值是文件数组
//
// 例如:
// req.files['avatar'][0] -> File
// req.files['gallery'] -> Array
//
// req.body 将具有文本域数据,如果存在的话
})
一个完整demo,可上传任何文件。
demo来源
//index.htm:
<html>
<head>
<title>文件上传表单</title>
</head>
<body>
<h3>文件上传:</h3>
选择一个文件上传: <br />
<form action="/file_upload" method="post" enctype="multipart/form-data">
<input type="file" name="image" size="50" />
<br />
<input type="submit" value="上传文件" />
</form>
</body>
</html>
//server.js:
var express = require('express');
var app = express();
var fs = require("fs");
var bodyParser = require('body-parser');
var multer = require('multer');
app.use(express.static('public'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(multer({ dest: '/tmp/'}).array('image'));
app.get('/index.htm', function (req, res) {
res.sendFile( __dirname + "/" + "index.htm" );
})
app.post('/file_upload', function (req, res) {
console.log(req.files[0]); // 上传的文件信息
var des_file = __dirname + "/tmp/" + req.files[0].originalname;
fs.readFile( req.files[0].path, function (err, data) {
fs.writeFile(des_file, data, function (err) {
if( err ){
console.log( err );
}else{
response = {
message:'File uploaded successfully',
filename:req.files[0].originalname
};
}
console.log( response );
res.end( JSON.stringify( response ) );
});
});
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("应用实例,访问地址为 http://%s:%s", host, port)
})
修改版,上传的文件被随机改名称。
需用到
//安装uuid,生成随机名称
npm install uuid
//引入v1版本,根据时间生成
let uuidv1 = require('uuid/v1');
//生成对象
let name = uuidv1();
//引入nodejs自带的path api
let path = require("path");
//用path.extname()方法获取后缀,如.html .png
let a = path.extname(req.files[0].originalname);
var express = require('express');
var app = express();
var fs = require("fs");
let uuidv1 = require('uuid/v1');
let path = require("path");
//var bodyParser = require('body-parser');
var multer = require('multer');
app.use(express.static('tmp'));
//app.use(bodyParser.urlencoded({ extended: false }));
// app.use(multer({ dest: '/tmp/'}).array('image'));
var upload = multer({ dest: 'upload/' });
app.get('/file_upload', function (req, res) {
res.sendFile( __dirname + "/" + "index.htm" );
})
app.post('/file_upload', upload.array('image'), function (req, res) {
console.log(req.files[0]); // 上传的文件信息
let name = uuidv1();
let a = path.extname(req.files[0].originalname);
console.log(name + a);
let namea = name + a;
var des_file = __dirname + "/tmp/" + namea;
fs.readFile( req.files[0].path, function (err, data) {
fs.writeFile(des_file, data, function (err) {
if( err ){
console.log( err );
}else{
response = {
message:'File uploaded successfully',
filename:namea
};
}
console.log( response );
// res.end( JSON.stringify( response ) );
res.sendFile( __dirname + "/" + "index.htm" );
});
});
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("应用实例,访问地址为 http://%s:%s", host, port)
})
1.文件上传有以下方法
- muilter.single(‘file’), //适用于单文件上传
- muilter.array(‘file’,num), //适用于多文件上传,num为最多上传个数,上传文件的数量可以小于num,
- muilter.fields(fields), //适用于混合上传,比如A类文件1个,B类文件2个。官方API有详细说明。
2.file为上传字段名称,当使用form表单submit方式上传时,必须与表单上传的name属性保持一致。
表单记得加上 enctype=‘multipart/form-data’
3.对上传文件大小限制,名称限制等均可在limits中加上,具体可加属性,请参考官方api。
注意点:
有时json数据会传来”type[0]”这种健,可以这么取值
var o={"type[0]":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"};
console.log(o['type[0]'])
//本机运行mongodb数据库 mongod --dbpath + ....../data/db
mongod --dbpath /Applications/mongodb/data/db