# NEMT **Repository Path**: akex9527/NEMT ## Basic Information - **Project Name**: NEMT - **Description**: express搭建web服务器模板 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: http://akexc.com - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-09-25 - **Last Updated**: 2022-04-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: Express, Nodejs, MongoDB, Mongoose, JWT ## README #
NEMT是什么?
NEMT是基于 **NodeJS** 的后端架构模板, 是 Node,Express,Mongodb,Template的首字母缩写。NEMT的已经配置常用的功能, 允许你只需要关注于**Schema**, 当然你也可以追加新功能.

nodejs nodejs nodejs nodejs license release"

### 使用 1. git clone https://gitee.com/KYALEX/NEMT.git 2. cd NEMT && npm i 3. node app.js ### 目录设计 - app.js -------- 入口文件 - models -------- 数据库模型 - routes --------- 路由 - index.js -------- 主路由(自动生成 CURD) * login.js -------- 登录 * upload.js -------- 文件上传 - utils --------- 工具函数 - db.js ------ 连接数据库 - autoCURD.JS ------- 根据模型自动生成 CURD 业务路由 - encrypt.js ------- 密码加密 - logger.js ------- 日志 - configs -------- 配置文件 - package.json --------- 项目所需依赖 - logs --------- 日志文件 - controllers ---------- 业务控制层 数据库 CURD 操作 ## 通用模块 ### 自动路由 > 反反复复的引入 **业务逻辑** 挂载到 **router** 是必须要避免的!!**autoCURD.js** 封装了通用数据模型的 **增删改查**操作 ```js const express = require(`express`) const router = express.Router() const user = require('../model/User') const Advertisement = require('../model/Advertisement') //封装 const ADDROUTER = require('../utils/autoCURD') //三个参数 挂载路由 , 表名 , 表Model ADDROUTER(router, 'user', user) ADDROUTER(router, 'Advertisement', Advertisement) module.exports = router ``` ### 图片上传 > 使用 **multer** 实现基本的图片上传通用接口, 可拓展文件成上传,如 doc, excel等 ```js const router = require(`express`).Router() const multer = require('multer') const adveArtisement = require('../model/Advertisement') const fs = require('fs') const storage = multer.diskStorage({ destination: './public/advertisements', filename: function (req, file, cb) { console.log(file) let extname = file.mimetype.split('/')[1] let imgname = Date.now() + parseInt(Math.random() * 999) + parseInt(Math.random() * 2222) let keepname = imgname + '广告图片' + '.' + extname cb(null, keepname) }, }) const upload = multer({ storage, }) router.post('/api/v1/uploadimg', upload.single('file'), async (req, res) => { console.log(req.body.datas) console.log('bodyssssss') const datas = JSON.parse(req.body.datas) datas.Adimg = req.file.filename adveArtisement.create(datas, function (err, doc) { console.log('doc', doc) if (err) return next(err) res.jsonp({ code: 200, data: doc, }) }) }) module.exports = router ``` ### 注册 - [bcrypt](https://www.npmjs.com/package/bcrypt) 加密密码,使用 mongdo 提供的 set 模型方法操作 ```js const mongoose = require('mongoose') const bcypt = require('../utils/encrypt') const userSchema = new mongoose.Schema({ user: { type: String, required: true, unique: true }, pwd: { type: String, required: true, set: value => bcypt(value) }, // 密码加密 email: String, phone: String, isaAdmin: { type: Boolean, default: true }, createtime: { type: Date, default: new Date() }, //创建时间 }) ``` ### 登录 - [bcrypt](https://www.npmjs.com/package/bcrypt) 验证密码 ```js const re = await User.findOne({ user: user.user }) if (!re) return res.status(400).send({ code: 400, msg: '用户不存在' }) // 异步密码比较 bcrypt.compare(user.pwd, re.pwd).then(valid => { if (!valid) return res.status(400).send({ code: 400, msg: '密码错误' }) ``` - [jwt](https://www.npmjs.com/package/jwt) 生成 `token`响应请求 ```js const token = jwt.sign({ user }, secret, { expiresIn: '2h' }) res.json({ code: 200, token, msg: '登录成功', }) }) ```