mongod koa

本文介绍如何利用Node.js的Koa框架与MongoDB数据库构建高效、灵活的Web应用程序。首先,我们将探讨Koa的基本概念和路由设置,然后讲解如何安装和配置MongoDB。接下来,我们将创建数据模型并实现数据的增删查改操作。最后,我们将展示如何在Koa应用中集成这些功能,实现数据驱动的Web服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

dbs/models/config/person.js

const mongoose = require('mongoose')

// 创建数据表模型,该文件的名字,即person,就是数据表的名字
// 下面给 person 表声明两个字段name和age

let personSchema = new mongoose.Schema({
    name: String,
    age: Number
})

// 通过建 model 给 person 赋予增删改查等读写的功能
module.exports = mongoose.model('Person', personSchema)
dbs/config.js
// 配置mongo 地址
module.exports =  {
    dbs: 'mongodb://127.0.0.1:27017/admin'
}
middleware\koa-pv.js
function pv (ctx) {
    global.console.log('当前路由', ctx.path) // 打印当前路由,node中全局不能用window,需要用global代替
}

module.exports = function () {
    return async function(ctx, next) {
        pv(ctx)
        await next() // 每个中间件都必须有这一句,用以执行下一个中间件
    }
}
routes\users.js
const router = require('koa-router')()
const Person = require('./../dbs/models/person.js')
router.prefix('/users')

router.get('/', function (ctx, next) {
  ctx.body = 'this is a users response!'
})

router.get('/bar', function (ctx, next) {
  ctx.body = 'this is a users/bar response'
})


/**
 *  一、 增加 内容 向person数据模型中
 *
 *     可以通过命令行执行:curl -d 'name=cck&age=27' http://localhost:3000/users/addPerson
 *     若返回: {
                "code": 0
              }
       证明添加数据成功。

       注意: save()方法是model自带的写入数据的方法, 通过实例 person 写入
 */

router.post('/addPerson', async function (ctx) {
  // 创建实例
  const person = new Person({
    name: ctx.request.body.name,
    age: ctx.request.body.age
  })

  let code = 0, // 状态码
      msg  = ''
  try {
    await person.save()
    code = 0
    msg  = '创建成功'
  } catch(e) {
    code = -1
    msg  = '创建失败'
  }

  // 返回状态(成功为0, 错误为-1)
  ctx.body = {
    code,
    msg
  }
})

/**
 *  二、 读取 内容 从person数据模型中
 *      命令行中输入:curl -d 'name=cck' http://localhost:3000/users/getPerson
 *      返回:{
                "code": 0,
                "result": {
                  "_id": "5beb91bcd6e7060ffcca6a46",
                  "name": "cck",
                  "age": 27,
                  "__v": 0
                },
                "results": [
                  {
                    "_id": "5beb91bcd6e7060ffcca6a46",
                    "name": "cck",
                    "age": 27,
                    "__v": 0
                  }
                ]
              }
 *
 *    注意: findOne()和find()方法是model自带的读取数据的方法, 注意:这里直接通过模型 Person 写入 !!!
 *          findOne() 只是找到一条符合条件的内容
 *          find() 可以找到整个符合条件的集合(数组)
 */

router.post('/getPerson', async function (ctx) {
  const result = await Person.findOne({
    name: ctx.request.body.name,
    age:ctx.request.body.age
  })

  const results = await Person.find({
    name: ctx.request.body.name,
    age:ctx.request.body.age
  })
if(ctx.request.body.length>0){}
  // 这里没有考虑异常,直接返回了结果
  ctx.body = {
    code: 0,
    result,
    results
  }
})

/**
 *  三、 修改 内容 从person数据模型中
 *      命令行中输入:curl -d 'name=wy&age=19' http://localhost:3000/users/updatePerson
 *      返回:{
                "code": 0,
              }
 *
 *    注意: where()和update()方法是model自带的读取数据的方法, 注意:这里直接通过模型 Person 写入 !!!
 *          where() 找到符合条件的内容
 *          update() 修改该内容
 */

router.post('/updatePerson', async function (ctx) {
  // 找到符合条件的name,并修改其age
  const result = await Person.where({
    name: ctx.request.body.name
  }).update({
    age: 13
  })

  // 这里没有考虑异常,直接返回了结果
  ctx.body = {
    code: 0
  }
})

/**
 *  四、 删除 内容 从person数据模型中
 *
 *    注意: where()和update()方法是model自带的读取数据的方法, 注意:这里直接通过模型 Person 写入 !!!
 *          where() 找到符合条件的内容
 *          remove() 删除该内容
 */

router.post('/removePerson', async function (ctx) {
  // 找到符合条件的name,并修改其age
  const result = await Person.where({
    name: ctx.request.body.name
  }).remove()

  // 这里没有考虑异常,直接返回了结果
  ctx.body = {
    code: 0
  }
})


module.exports = router
app.js
const Koa = require('koa')
const app = new Koa()
const views = require('koa-views')
const json = require('koa-json')
const onerror = require('koa-onerror')
const bodyparser = require('koa-bodyparser')
const logger = require('koa-logger')

const index = require('./routes/index')
const users = require('./routes/users')

const pv = require('./middleware/koa-pv')


app.use(pv())

// error handler
onerror(app)

// middlewares
app.use(bodyparser({
  enableTypes:['json', 'form', 'text']
}))
app.use(json())
app.use(logger())
app.use(require('koa-static')(__dirname + '/public'))

app.use(views(__dirname + '/views', {
  extension: 'ejs'
}))



// logger
app.use(async (ctx, next) => {
  const start = new Date()
  await next()
  const ms = new Date() - start
  console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
})

// routes
app.use(index.routes(), index.allowedMethods())
app.use(users.routes(), users.allowedMethods())

// error-handling
app.on('error', (err, ctx) => {
  console.error('server error', err, ctx)
});


/*引入koa-session*/
const session = require('koa-session');
/*配置koa-session*/
app.keys = ['some secret hurr'];

const CONFIG = {
  key: 'koa:sess', //cookie key (default is koa:sess)
  maxAge: 86400000, // cookie 的过期时间maxAge in ms (default is 1 days)
  overwrite: true, //是否可以overwrite (默认default true)
  httpOnly: true, //cookie 是否只有服务器端可以访问httpOnly or not (default true)
  signed: true, //签名默认true
  rolling: false, //在每次请求时强行设置cookie,这将重置cookie 过期时间(默认:false)
  renew: true, //当cookie快过期时请求,会重置cookie的过期时间
};
app.use(session(CONFIG, app));

module.exports = app

/*引入koa-session*/
const session = require('koa-session');
/*配置koa-session*/
app.keys = ['some secret hurr'];

const CONFIG = {
  key: 'koa:sess', //cookie key (default is koa:sess)
  maxAge: 86400000, // cookie 的过期时间maxAge in ms (default is 1 days)
  overwrite: true, //是否可以overwrite (默认default true)
  httpOnly: true, //cookie 是否只有服务器端可以访问httpOnly or not (default true)
  //如果想让浏览器获取的话将httpOnly设置为false
  signed: true, //签名默认true
  rolling: false, //在每次请求时强行设置cookie,这将重置cookie 过期时间(默认:false)
  renew: true, //当cookie快过期时请求,会重置cookie的过期时间
};
app.use(session(CONFIG, app));
结语:可以直接设置cookie在浏览器储存 但是明文不安全 所以有了session,在服务器设置session然后操作判断有没有session,如果有就是登陆状态,如果没有就是未登录状态,退出登陆可以将session清空 然后重定向到'/login' 即重定向登陆,可以通过CONFIG.httpOnly设置为是否浏览器可获取,浏览器端就是cookie 
jwt jsonwebtoken 实现登陆注册退出
https://segmentfault.com/a/1190000020231569?utm_source=tag-newest

 

SAP ECC升级为SAP S/4 HANA是一项重要的技术和业务变革,为企业提供了更高效、更灵活的ERP解决方案。在SAP ECC升级为SAP S/4 HANA的过程中,以下是一些关键的变化和优势。 首先,SAP ECC升级为SAP S/4 HANA意味着更强大的性能和处理能力。SAP S/4 HANA利用内存计算技术,可以实时处理大量的数据,加快事务处理速度。这将有助于企业加快决策制定和实时决策执行,提高绩效和竞争力。 其次,SAP S/4 HANA引入了新的功能和特性,使企业能够更好地应对市场挑战。例如,SAP S/4 HANA提供了更强大的分析能力和预测功能,可以帮助企业更好地利用数据进行商业决策和提供更智能的定制化服务。 此外,SAP S/4 HANA还提供了更加灵活的部署选项。企业可以选择在云端部署SAP S/4 HANA,从而降低硬件设备和维护成本,并且可以灵活扩展和调整资源。 然而,SAP ECC升级为SAP S/4 HANA并非一项简单的任务。这是一项复杂的过程,需要企业进行充分的规划和准备。首先,企业需要评估其当前的SAP ECC系统,包括数据结构、业务流程和自定义功能等方面。其次,企业需要选择合适的升级路径和方法,以确保数据迁移和系统集成的顺利进行。最后,企业还需要培训员工以适应新系统的变化和功能。 总之,SAP ECC升级为SAP S/4 HANA是一项重要的战略决策,将为企业带来更高效、更灵活和更创新的ERP解决方案。然而,企业在进行升级前需要充分了解和准备,并与SAP合作伙伴密切合作,确保升级过程的成功实施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值