模型不能通用,但是增删查改可以通用
// categories=>Category、
router.post('/categories', async (req, res) => {
const model = await Category.create(req.body)
res.send(model)
})
app.use('/admin/api/rest/:resource', router)
:将:resource
设置为动态的替换categories
等
-
先安装
npm i inflection
-
// 依靠动态参数可以引入不同的模型,放入增删查改当中 const modelName = require('inflection').classify(req.params.resource) const Model = require(`../../models/${modelName}`)
-
router.get('/', async (req, res) => { const modelName = require('inflection').classify(req.params.resource) const Model = require(`../../models/${modelName}`) // populate表示关联取出东西,不仅仅可以取到id,可以取到完整的对象信息 const items = await Model.find().populate('parent').limit(10) // 限制十条数据 res.send(items) // 直接发送给前端 }) // 进阶 app.use('/admin/api/rest/:resource', async(req, res, next) => { const modelName = require('inflection').classify(req.params.resource) req.Model = require(`../../models/${modelName}`) next() }, router) }
使用的是element-ui, 需要一个完整的url<el-upload action="$http.defaults.baseURL + '/upload'" \>
在后台使用 multer
处理 :npm i multer
安装依赖:npm i bcryptjs
password: {
type: String,
set(val) {
return require('bcryptjs').hashSync(val, 10)
}
}
会生成加密的密码,数据库管理员也无法知道用户密码,即使是同一个字符串也会生成不同的加密哈希字符
使用bcryptjs
自带的方法
app.post('/admin/api/login', async (req, res) => {
// req.body表示客户端传过来的所有数据
const { username, password } = req.body
// 1.根据用户名找用户,无法通过密码,数据库里面没有密码
const AdminUser = require('../../models/AdminUser')
const user = await AdminUser.findOne({ username }).select('+password')
// 2.校验密码
if (!user) {
console.log('bbbbbbbbbb')
return res.status(422).send({
message: '用户不存在'
})
}
console.log(password)
const isValid = require('bcryptjs').compareSync(password, user.password)
if (!isValid) {
return res.status(422).send({
message: '密码错误'
})
}
// 3.返回token
})
描述:如果,对象中未定义该属性,但需要给该属性赋值,就要用$set()显式赋值
例如:
:on-success="res =>$set(model,'banner',res.url)"
// 第一个参数为对象名,第二个为属性名,第三个为赋值
原因:有些图片不是线上地址,上传地址是localhost:3000,网页上访问,电脑上是没有开启3000端口的
解决办法:使用 robo 软件将数据库的localhost:3000替换成自己的域名
db.getCollection("items").find({}).map(doc=>{
doc.icon = doc.icon ? doc.icon.replace('localhost:3000', 'moba.qiumojian.top') : null
db.items,save(doc)
return doc
})
- npm i -g pm2
- pm2 list: 查看进程
- pm2 start index.js : 在其目录下跑起程序
- pm2 reload [name] index :修改完程序后重新跑起程序