首页 > 编程语言 >使用nodeJs框架koa2搭建项目后端

使用nodeJs框架koa2搭建项目后端

时间:2023-03-15 09:37:28浏览次数:43  
标签:const nodeJs +-- ctx js koa2 app require 搭建

使用koa2搭建项目后端

 

github源码地址:https://github.com/liuerhost/koa2-demo.git
1. 安装koa脚手架—koa-generator

npm install -g koa-generator

2. 创建koa2项目

koa2 -e node-demo

  -e 代表使用ejs模板创建工程 

  node-demo 工程名称

3. 进入工程,安装依赖

cd node-demo 
npm i

4. 启动项目 ,访问浏览器

npm start
http://localhost:3000

至此一个简单的Koa工程完成。浏览器输入网址后出现如下

5. 目录结构

.
+-- bin
|   +-- www               // 项目启动必备文件,配置端口等服务信息
+-- db
|   +-- config.js         // 数据库配置信息
|   +-- seqMysqlDB.js     // sequelize 链接数据库的配置(myslq配置方式一)
|   +-- mysqlDB.js        // mysql基本配置(mysql配置方式二)
+-- models
|   +-- User.js           // User实例
+-- node_modules          // 项目依赖,安装的所有模块都会在这个文件夹下
+-- public                // 存放静态文件,如样式、图片等
|   +-- images            // 图片
|   +-- javascript        // js文件
|   +-- stylesheets       // 样式文件
+-- routers               // 存放路由文件,如果前后端分离的话只用来书写api接口使用
|   +-- index.js
|   +-- userBase.js       // 使用mysql方式二的路由的方式
|   +-- userUpgrade.js    // 使用mysql方式一的路由的方式
+-- views                 // 存放存放模板文件,就是前端页面,如果后台只是提供api的话,这个就是备用
|   +-- error.ejs
|   +-- index.ejs
+-- app.js                // 主入口文件
+-- package.json          // 存储项目名、描述、作者、依赖等等信息
+-- package-lock.json     // 存储项目依赖的版本信息,确保项目内的每个人安装的版本一致

6. 安装mysql数据库驱动

npm install mysql2 sequelize --save

7. 安装koa2-cors 跨域包

npm install koa-cors --save

8. db包:

config.js

const config = {
    host: '127.0.0.1',
    username: 'root',
    password: '123456',
    database: 'test1',
    port: 3306
}

module.exports = config

mysqlDB.js

const mysql = require('mysql')

// 创建数据池
// const pool = mysql.createPool({
//     host: '127.0.0.1',
//     user: 'root',
//     password: '123456',
//     database: 'jxgl'
// })

// // 在数据池中进行会话操作
// pool.getConnection(function(err,connection){

//     connection.query('select * from t_jxgl_user',(error,results,fields)=>{
//         // 结束会话
//         connection.release();
//         // 如果有错误就抛出
//         if (error) throw error;
//     })

// })

function _connection(){
    let connection = mysql.createConnection({
        host: '127.0.0.1',
        user: 'root',
        password: '123456',
        database: 'jxgl'
    })
    
    connection.connect();
    return connection;
}

exports.query = function(sql,params = null){
    let connection = _connection();
    return new Promise(function(resolve,reject){
        connection.query(sql,params,function(error,results,fields){
            if (error) throw error;
            resolve(results);
        });

        connection.end();
    })
}

seqMysqlDB.js

const Sequelize = require('sequelize');
const config = require('./config')

console.log('init sequelize...');

const sequelize = new Sequelize(config.database,config.username,config.password,{
    host: config.host, // 数据库地址
    dialect: 'mysql', // 指定数据库类型
    pool:{
        max:5, // 最大连接数量
        min:0, // 最小连接数量
        idle:10000 // 如果一个线程10s内没有被使用过的话就释放
    },
    logging: true // 显示log
})

//对连接进行测试,查看控制台
//  sequelize
//     .authenticate()
//     .then(() => {
//         console.log('******Connection has been established successfully.********');
//         console.log('******测试结束,即将退出!!!********');
//         process.exit(); //结束进程
//     })
//     .catch(err => {
//         console.error('***************Unable to connect to the database:***********', err);
//     }); 

module.exports = sequelize;

9. models包

User.js

const Sequelize = require("sequelize");
const sequelize = require('../db/seqMysqlDB');

const User = sequelize.define('users', {
    username: {
        type: Sequelize.STRING(100),
        unique: true
    },
    password: Sequelize.STRING(100),
},
{
  freezeTableName: false,
  timestamps: true
});
//timestamp字段,默认为true,表示数据库中是否会自动更新createdAt和updatedAt字段,false表示不会增加这个字段。
//freezeTableName,默认为true,会自动给表名表示为复数: user => users,为false则表示,使用我设置的表名


//创建表,默认是false,true则是删除原有表,再创建
User.sync({
    force: false,
});

module.exports = User;

/routes/userDemo.js

const model = require("./model");
const Router = require("koa-router");
let router = new Router();
router.prefix('/userDemo')
let User = model.User; //获取User模型

router.get('/', async (ctx) => {
    ctx.body = '欢迎来到用户首页!'
});
//注册页
router.get('/registerPage', async (ctx) => {
    let html = `
            <div>
                <h1>Hello,Koa2! request POST</h1>
                <h2>注册页!!!</h2>
                <form method="POST"  action="/userDemo/register">
                    <p>username:</p>
                    <input name="username" /> <br/>
                    <p>password:</p>
                    <input name="password" /> <br/>
                    <button type="submit">submit</button>
                </form>
            </div>
        `;
    ctx.body = html;
});
//注册
router.post('/register', async (ctx) => {
    let registerUser = ctx.request.body;
    console.log(User)
    
    await User.create({
            username: registerUser.username,
            password: registerUser.password
        })
        .then((result) => {
            ctx.body = {
                code: 200,
                msg: '注册成功!',
                message: result
            }
        })
        .catch(err => {
            ctx.body = {
                code: 500,
                msg: '注册失败!',
                message: err
            }
        })
});
//登录页
router.get('/loginPage', async (ctx) => {
    let html = `
            <div>
                <h1>Hello,Koa2! request POST</h1>
                <h2>页!!!</h2>
                <form method="POST"  action="/userDemo/login">
                    <p>username:</p>
                    <input name="username" /> <br/>
                    <p>password:</p>
                    <input name="password" /> <br/>
                    <button type="submit">submit</button>
                </form>
            </div>
        `;
    ctx.body = html;
});
//登录
router.post('/login', async (ctx) => {
    let loginUser = ctx.request.body;
    //数据库查询
    await User.findOne({
            where: {
                username: loginUser.username,
            }
        })
        //查询值传入
        .then(async (result) => {
            //判断密码是否一致
            if (result && (result.password === loginUser.password)) {
                ctx.body = {
                    code: 200,
                    message: '登录成功',
                };
            } else {
                ctx.body = {
                    code: 500,
                    message: '用户名不存在',
                };
            }
        })
        .catch(err => {
            //findOne行为发生错误时
            ctx.body = {
                code: 500,
                message: '登录出错!',
                data: err
            };
        })

});


//查找所有
router.get('/allUser', async (ctx) => {
    try {
        let result = await User.findAll();
        if (result) {
            ctx.body = {
                code: 200,
                message: result
            }
        } else {
            ctx.body = {
                code: 500,
                message: '表中没有数据!',
            };
        }
    } catch (error) {
        ctx.body = {
            code: 500,
            message: '错误',
            data: err
        };
    }

})


module.exports = router;

app.js修改

const Koa = require('koa')
const app = new Koa()
const views = require('koa-views')
const json = require('koa-json')
const one rror = require('koa-onerror')
const bodyparser = require('koa-bodyparser')
const logger = require('koa-logger')
const cors = require('koa2-cors')
const Router = require('koa-router')
const index = require('./routes/index')
const users = require('./routes/users-old')
const user = require("./routes/userDemo.js");

// 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())
app.use(user.routes(),user.allowedMethods()) // 新增

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

// 设置跨域
app.use(cors());
module.exports = app

 

到此整个配置完成。

标签:const,nodeJs,+--,ctx,js,koa2,app,require,搭建
From: https://www.cnblogs.com/sttchengfei/p/17217255.html

相关文章

  • nodejs安装使用express
    NodeJs快速搭建Express框架1.用Express应用程序生成器express-generator进行快速搭建。1.1安装express-generator命令npminstallexpress-generator-g1.2生成......
  • 38 openEuler搭建FTP服务器-FTP总体介绍
    38openEuler搭建FTP服务器-FTP总体介绍38.1FTP简介FTP(FileTransferProtocol)即文件传输协议,是互联网最早的传输协议之一,其最主要的功能是服务器和客户端之间的文件传输......
  • Python递归画树 - 画蕨类植物 - 画窗格 - 搭建分形平台
    @目录画树画蕨类植物画窗格分形平台画树importnumpyasnpimportcv2importmathdefdraw_tree(img,origin,length,angle,scale,left_angle,left_scale,ri......
  • Docker搭建Mysql集群
    Docker搭建Mysql集群前言:使用PXC集群方案搭建集群安装PXC镜像dockerpullpercona/percona-xtradb-cluster:5.7.21改名dockertagpercona/percona-xtradb-clus......
  • nodejs、vue安装
    安装完成软件后注意点:本人只做记录防止原文删除原文:https://www.jb51.net/article/251371.htm一、创建全局安装目录和缓存日志目录运行 npmconfigsetcache"D:\Pro......
  • 使用vscode + vite + vue3+ vant 搭建vue3脚手架
    【术栈】开发工具:VSCode代码管理:Git前端框架:Vue3构建工具:Vite路由:vue-router4x状态管理:vuex4xAJAX:axiosUI库:vant数据模拟:mockjscss预处理:sass构建vue3项目1,安装 vite......
  • Ubuntu18.04下载nodejs
    下载nodejs参考链接官网下载源码官网:https://nodejs.org/中文网(推荐):http://nodejs.cn/可以下载自己想要的版本解压并做软连接tar-xvfnode-v10.15.3-linux-x64.ta......
  • 搭建android源代码gitlab仓库
    git设置#gitconfig--globalhttp.postBuffer1048576000manifest.xml原始的manifests.xml文件在源头代码repo仓库中#ls-l.repo/total40drwxrwxr-x5100110......
  • 直播平台搭建源码,uniapp progress进度条
    直播平台搭建源码,uniappprogress进度条.progress-container{height:20rpx;display:flex;flex-direction:row;align-items:center;justify-content:center;margin:......
  • linux 安装nodejs
    https://www.cnblogs.com/veezeng/p/11164066.htmlhttps://nodejs.org/dist/......