简介
nodejs是一个javascript运行环境,基于Chrome V8引擎
以前js代码只能运行在浏览器中,nodejs出现后,只要安装了nodejs 就可以运行js
控制台中敲node 命令 即进入node环境 可直接运行js代码
>node
>1+1
> 2
也可直接运行js文件
> node app.js
2009年 Ryan Dahl 开发 是C++开发
下载
下载地址:https://nodejs.org/en/download/
选择对应的操作系统下载即可 傻瓜式安装一直下一步即可
安装完成后检查是否安装成功
终端中输入 node --version
npm
npm:Node Package Manager node包管理工具
下载nodejs时已自动将npm下载安装
因为js开发者众多,贡献开源代码的人也非常多,
所以就有了npm这个世界上最大的软件包仓库,各种功能几乎都可以找到现有的包
安装:npm install xxx
nodemon
一个自启动工具 热更新工具
npm install nodemon -g
此时使用nodemon命令运行js文件 保存后自动重启
> nodemon app.js
express
简介
express是一个基于nodejs开发的框架
基本使用
app.js:
const express = require("express");
const app = express();
//get请求 req是请求对象 res响应对象
app.get("/testGet", function(req, res) {
// res.end({ code: 2222 }); end只可以返回字符串
// res.send({ code: 2222 }); send可以返回json对象
// res.json({ code: 22 }); 返回json对象
});
// post请求 req是请求对象 res响应对象
// 因为post请求参数在请求体 无法直接获取 需要额外模块
app.post("/testPost", function(req, res) {
res.send({ code: 6666 });
});
// 监听端口 必须
app.listen("3333", function() {
console.log("server start....");
});
启动:
nodemon app.js
此时即可直接访问上面的接口 http://localhost:3333/testGet
body-parser
express中没有内置的获取post请求体的api,需要第三方包 body-parser
下载: npm install body-parser
配置:
// 解析以 application/json 和 application/x-www-form-urlencoded 提交的数据
var jsonParser = bodyParser.json();
var urlencodedParser = bodyParser.urlencoded({ extended: false });
使用:
app.post('/testPost',jsonParser,function(req,res){
const body = req.body;
res.send({code:222})
})
使用multer处理前端上传的文件
multer基本配置
// 接收文件
const multer = require('multer');
var storage = multer.diskStorage({
destination: function (req, file, cb) {
//指定文件路径存储地
cb(null, './uploads/img/');
},
filename: function (req, file, cb) {
//指定存储后的文件名(有两个问题)
//1文件名重复覆盖 时间戳
//2后缀名发生改变
console.log('---', file);
//获取后缀名
let exts = file.originalname.split('.');
let ext = exts[exts.length - 1];
let tepname = (new Date()).getTime() + parseInt(Math.random() * 9999);
//拼接名字
cb(null, `${tepname}.${ext}`);
}
});
var upload = multer({
storage: storage
});
单文件上传
app.post('/upload', upload.single('avatar'), (req, res) => {
console.log(req.file);
res.send('upload已被调用');
});
多文件 同一key值
// 接收多文件
app.post('/avatarImgs', upload.array('imgs', 9), function (req, res) {
console.log(req.files);
res.send('avatarImgs接口调用');
});
多文件 多key值
// 接收多文件多key
app.post('/multipleKeyFile', upload.fields([{ name: 'imgs', maxCount: 3 }, { name: 'bg', maxCount: 1 }]), function (req, res) {
console.log('@@@--', req.files);
res.send('multipleKeyFile');
});
设置cors允许跨域
//设置跨域访问
app.all("*", function (req, res, next) {
//设置允许跨域的域名,*代表允许任意域名跨域
res.header("Access-Control-Allow-Origin", '*');
//允许的header类型
res.header("Access-Control-Allow-Headers", "content-type");
//跨域允许的请求方式
res.header("Access-Control-Allow-Methods", "DELETE,PUT,POST,GET,OPTIONS");
// 允许跨域携带cookie 注意 设置此选项时 Access-Control-Allow-Origin选项须为具体域名
res.header('Access-Control-Allow-Credentials', true);
if (req.method.toLowerCase() == 'options')
res.send(200); //让options尝试请求快速结束
else
next();
})