#开启数据库后台
mongod.exe --dbpath C:\MongoDB\data\db
#创建koa2
没有koa2的先执行 npm i -g koa-generator
koa2 +名字,然后将起一个src文件夹,将其它文件放进src里
#安装session插件
npm i koa-generic-session --save
const seetion=require('koa-generic-session')
app.use(session({
cookie: {
path: '/',
httpOnly: true,
maxAge: 24 * 60 * 60 * 1000 // 一天
}
}))
#解决跨域 安装cors插件
npm i koa2-cors --save
const cors=require('koa2-cors')
app.use(cors({
origin:'http://localhost:8081',
credentials:true
}))
#连接数据库
npm i mongoose --save
const mongoose=require('mongoose');
const url='mongodb://127.0.0.1:27017';
const dbName='comment2'
mongoose.connect(`${url}/${dbName}`).then(data=>{
console.log("连接成功");
}).catch(ree=>{
console.log('登录失败');
});
module.exports=mongoose
#定义Schema文件创建Schema.js
const mongoose=require('./db');
const resulSchema=mongoose.Schema({
usename:{
type:String,
require:true,
unique:true
},
password:String
})
const user=mongoose.model('uses',resulSchema)
module.exports={
user
}
#创建一个返回统一格式的类
##成功状态
class Success{
constructor(data={},code=200){
this.code=code
if(data!=null){
this.data=data
}
}
}
module.exports={
Success
}
##失败
class errors{
constructor(message='erron',code=-1){
this.code=code
this.message=message
}
}
module.exports={
errors
}
##统一放在一个文件里(index)
const SuccessModel = require('./SuccessModel')
const ErrorModel = require('./ErrorModel')
module.exports = { SuccessModel, ErrorModel }
#创建数据和路由的注册
创建一个hooks名字随便
const users=require('../Schemas/user')
async function createUser(username,Password){
const user=await users.create({username,Password})
return user
}
module.exports={
createUser
}
注册路由
onst router = require('koa-router')()
const {createUser}=require('../conster/user')
const { Success, errors }=require('../res/index')
router.prefix('/api/user')
router.get('/Registr', async function (ctx, next) {
const {username,Password}=ctx.requset.body
try {
const resdata=await createUser(username,Password)
ctx.body=new Success(resdata)
} catch (error) {
/* 1001注册失败 */
ctx.body=new errors(error,1001)
}
})
module.exports = router
然后在app.js里写上
const users = require('./routes/users')
app.use(users.routes(), users.allowedMethods())
#写一个文件夹来创建中间件来判断是否已经登录
文件名可以叫check/loginCheck
module.exports = async (ctx, next) => {
const session = ctx.session
if (session && session.userInfo) {
await next()
return
}
ctx.body = {
errno:-1,
message:'登录验证失败'
}
}
要是路由需要验证是否登录才能被请求到数据这样子写
// 创建收货地址 这里是用logincheck也就是路径旁边加上
const loginCheck = require('../middleware/loginCheck') //文件名组件随便起
router.post('/', loginCheck, async function (ctx, next) {
const userInfo = ctx.session.userInfo
const username = userInfo.username
const data = ctx.request.body || {} // 前端传来的数据
// 创建数据
try {
const newAddress = await createAddress(username, data)
ctx.body = new SuccessModel(newAddress)
} catch (ex) {
console.error(ex)
// 返回失败
ctx.body = new ErrorModel(10004, `创建地址失败`)
}
})
数据库的增删改成
// nodejs 连接 mongodb
// 体会 nodejs 连接 mongodb 的能力,不会真正的用到路由上
// mongoose 对接路由的功能
const MongoClient = require('mongodb').MongoClient
const url = 'mongodb://localhost:27017' // 本地启动的 mongodb 服务
const dbName = 'comment1' // 数据库(留言板项目的数据库 )
MongoClient.connect(url, {
useUnifiedTopology: true,
useNewUrlParser: true
}, (err, client) => {
if (err) {
console.error('mongodb 连接出错', err)
return
}
console.log('mongodb 连接成功')
// 切换数据库 database
const db = client.db(dbName)
// 切换到指定的集合 collection
const userCollection = db.collection('users')
// // 查询数据
// userCollection.find().sort({ _id: -1 }).toArray((err, result) => {
// if (err) {
// console.error('查询数据出错', err)
// return
// }
// console.log('查询结果', result)
// })
// // 新增数据
// userCollection.insertOne({
// username: 'shuangyue',
// password: 'abc',
// age: 30,
// city: 'beijing'
// }, (err, result) => {
// if (err) {
// console.error('插入数据出错', err)
// return
// }
// console.log('插入后的返回结果', result.insertedCount, result.insertedId)
// })
// // 修改数据
// userCollection.updateOne(
// { username: 'zhangsan' }, // 修改的条件
// { $set: { age: 21 , city: 'beijing'} }, // 修改的内容
// (err, result) => {
// if (err) {
// console.error('修改数据出错', err)
// return
// }
// console.log('修改后的返回结果', result.modifiedCount)
// }
// )
// 删除数据
userCollection.deleteOne({ username: 'wangwu' }, (err, result) => {
if (err) {
console.error('删除数据出错', err)
return
}
console.log('删除成功')
})
// 关闭
// client.close()
})