如何用node写一个后台项目(前后端分离)

如何用node写一个后台项目

首先你的电脑里有一个node环境(废话一句)
node传送门
项目结构
在这里插入图片描述

1.新建一个项目文件夹,终端打开 使用npm init 初始化
2.安装所用的包 npm install express body-parser mysql
express : express 的框架
body-parser :用于处理post请求传参的值
mysql: 数据库
2.新建一个名为app.js的入口文件
3.首先新建www.js文件 在bin文件夹里 (启动服务)

//www.js
//引入express
const express = require('express')
// 实例化一个 express的对象
const app = express()
//监听3000端口
var server = app.listen(3000, function () {
    
    
    var host = server.address().address
    var port = server.address().port
    if (host == '::') {
    
    
        host = 'localhost:'
    }
    console.log("启动成功访问地址 http://", host, port)
})
//暴露
module.exports = app

4.新建src文件夹 src文件夹里分别建 config controller db model router 文件夹
5.从config 文件夹里 创建db.js (数据库相关配置)

let MYSQL_CONF={
    
    
 	    host: 'localhost', //主机名
        user: '',//用户名
        password: '',//密码
        port: 0000, //端口号
        database: ''//数据库名称
}
//暴露
module.exports = {
    
    
    MYSQL_CONF
}

6.从db文件夹里新建 mysql.js文件 (连接数据库 执行sql语句)

//引入mysql模块
var mysql = require('mysql')
//引入mysql配置数据
const {
    
    
    MYSQL_CONF
} = require('../config/db')
var conn
//连接数据库
function handleDisconnection() {
    
    
    //创建数据库
    var connection = mysql.createConnection(MYSQL_CONF);
    //连接数据库
    connection.connect(function (err) {
    
    
        if (err) {
    
    
            setTimeout(handleDisconnection(), 2000);
        }
    });
    //报错
    connection.on('error', function (err) {
    
    
        if (err.code === 'PROTOCOL_CONNECTION_LOST') {
    
    
            console.log('重连')
            handleDisconnection();
        } else {
    
    
            throw err;
        }
    });
    conn = connection
}
// 统一执行sql的函数
function exec(sql) {
    
    
    //连接数据库
    //每一次执行sql语句 重新连接数据库
    handleDisconnection()
    const promise = new Promise((resolve, reject) => {
    
    
        conn.query(sql, (err, result) => {
    
    
            if (err) return reject(err)
            return resolve(result)
        })
    })
    return promise
}
//暴露
module.exports = {
    
    
    exec
}

7.从model文件夹里新建 resModel.js

//返回成功信息
function success(msg, data) {
    
    
    if (!data) {
    
    
        data = ''
    }
    if (!msg) {
    
    
        msg = ''
    }
    let value = {
    
    
        code: 1,
        data,
        msg
    }
    return value
}
//返回失败信息
function fail(msg, data) {
    
    
    if (!data) {
    
    
        data = ''
    }
    if (!msg) {
    
    
        msg = ''
    }
    let value = {
    
    
        code: 0,
        data,
        msg
    }
    return value
}
//暴露
module.exports = {
    
    
    success,
    fail
}

8.app.js文件

//引入处理post请求参数的组件
const bodyParser = require('body-parser');
//引入接口为/user的路由
const user = require('./src/router/user')
//引入服务js
const app = require('./bin/www')
//防止跨域
app.all('*', function (req, res, next) {
    
    
    console.log('有请求')
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Content-Type", "application/json;charset=utf-8");
    res.header("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
    res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
    if (req.method.toLowerCase() == 'options')
        res.send(200); //让options尝试请求快速结束
    else {
    
    
        next();
    }
});
//使用bodyParser对post请求参数进行处理
app.use(bodyParser.urlencoded({
    
    
    extended: false
}))
app.use(bodyParser.json())
//使用user路由
app.use('/user', user)

我们看到了 app.js 引入了 user路由 所以我们需要
9.从router文件夹里新建 user.js

//引入express模块
const express = require('express')
// 创建 user路由
const user = express.Router()
//从../controller/user 引入sql方法
const {
    
    
    userList
} = require('../controller/user')
//引入成功失败 返回方法
const {
    
    
    success,
    fail
} = require('../model/resModel')
//写接口   /user/userList
user.get('/userList', async (req, res) => {
    
    
    //sql返回值
    const result = await userList()
    //返回给前端
    res.send(success('返回的数据', result))
})
// 暴露
module.exports = user

10.从controller 文件夹新建 user.js

//引入sql方法
const {
    
    
    exec
} = require('../db/mysql')
//查询所有用户的sql
const userList = () => {
    
    
    const sql = `select * from people`
    return exec(sql).then(rows => {
    
    
        return rows || {
    
    }
    })
}
//暴露
module.exports = {
    
    
    userList
}

其他的接口 以此类推

demo地址:https://gitee.com/liuyang13831467435/node-template

Guess you like

Origin blog.csdn.net/weixin_47284756/article/details/118460060