模块化
-
内置模块
- 文件管理(fs)
fs.readdirSync() //同步读取文件夹 fs.readir() //异步读取 fs.mkdir() //创建文件夹 fs.mkdirSync() //异步创建文件夹 fs.remane() //更改 fs.remaneSync() //异步更改 fs.rmdir() //删除文件夹
fs.rmdirSync() //异步 fs.writeFile() //创建文件 fs.appendFile() //写入文件 fs.readFile() //读取文件 fs.unlink() //删除文件 fs.stat() //文件属性相关
- url 解析URL的(统一资源定位符)
url.parse() 字符串->对象 url.format() 对象->字符串
- queryString 查询字符串
queryString.parse() 字符串->对象 queryString.stringify() 对象->字符串 queryString.escape() queryString.unescape()
- 爬虫(http,https网络请求)
- 获取目标网站 http.get
- 分析网站内容 cheerio
- 获取有效信息 下载或者其他操作
- path 路径
path.join(__dirname, './hehe')
- Promise 同步的形式写异步代码
function delfile() { return new Promise((resolve, reject) => { resolve()//成功 reject() //失败 }) } delfile() .then((msg) => { }) .catch((err) => { })
-
自定义模块
- 第三方
邮箱验证码
nodemailer 可以实现发邮件cheerio 可以使用jq里的选择器
-
express 书写api
body-parser parse body- get req.query
- post req.body 需要body-parser 插件进行解析
const express =require('express') const bodyParser = require('body-parser') const app = express() app.use(bodyParser.urlencoded{extended: false}) //parse application/x-www-form-urlencoded app.use(bodyParser.json()) //parse application/json app.get(url, (req, res) => { //req.query //res.send() }) app.post(url, (req, res) => { //req.body }) app.listen(端口号,()=> { })
userRouer.js var express = require('express') var router = express.Router() //获取路由的实例 router.get('/add', (req, res) => { res.send() }) module.exports = router server.js const express = require('express') const app = express() let userRouter = require('./userRouer') app.use('./user', userRouter) app.listen(端口号,()=> { })
中间件
app.use('/', (req, res, next)=> { next() //是否继续往下执行 })
- mongodb数据库
mongoose 操作mongodb
const mongoose = require(‘mongoose’) mongoose.connect('mongodb://localhost/数据库名', {useNewUrlPaser: true}); var db = mongoose.connection; db.on('error', Function) db.once('open', Function) var Schema = mongoose.Schema; //创建一个和集合相关的schema对象 类似表头 var blogSchema = new Schema({ us: {type: String, required: true} }) var Use = mongoose.model('user', userSchema); User.insertMany({us:'Jim'}) .then((data) => {}) .catch((err) => {})
*apidoc 自动生成api接口文档
*request 客户端发送请求
*multer 图片上传
const express = require('express') const router = express.Router() const multer = require('multer') var storage = multer.diskStorage({ destination: function(req, file, cb) { //制定文件路径 cb(null, './uploads') }, filename: function(req, file, cb) { let fileArr = file.originalname.split('.') let ext = fileArr[fileArr.length - 1] let tmpname = new Date().getTime() cb(null, `${tmpname}.${ext}`); } }); var upload = multer({ storage: storage }) router.post('/upload', upload.single('hehe'), (req, res) => { })
*实现socket的方式
1.net
2.socket.io 麻烦 兼容性最好
3.websocket h5新增 低版本浏览器不兼容 使用方式简单 ws
前端后端 连接- 搭建socket 服务器 const ws = new WebSocket.Server({port: 8080},()={})
ws.on('connection') - 前端进行连接 const ws = new WebSocket(‘ws://localsocket:8080’)
ws.onOpen()
数据交互
client.on('message',()=> {}) - 前端主动发送数据
- 后端主动发送数据
ws.onmessage=()=>{}
ws.send()
前后端端开的处理
client.on('close',()=>{})
ws.onClose() - 断开连接
*身份验证
http请求 无状态- 登录时 发布一个加密字符串(用户相关信息) 给前端(自动放在cookie)
- 调用其他接口 加密字符串 作为参数传递给服务器(cookie自动传递)
- 根据权限进行验证
session+cookie
cookie-parser
express-session
jwt jsonwebtoken
- 自己
- 创建一个模块(一个js文件一个模块)
- 导出一个模块(module.exports=name)
- 引用一个模块并调用(require)
项目中出现的问题
mac安装和使用MongoDB
安装mongodb中出现的问题
命令行执行brew install mongodb,结果Error: mongodb: unknown version :mountain_lion,原因HomeBrew 从核心仓库 (#43770) 当中移除了mongodb 模块
解决:
brew uninstall mongodb
brew tap mongodb/brew
brew install mongodb-community
启动mongodb
mongod
操作mongodb
mongo
退出mongodb
执行
use admin;
db.shutdownServer();
跨域问题
ajax 同源策略 要求协议,主机(ip,域名),端口号一致
解决办法
1.cors
2.jsonp
3.代理
4.websocket