如何用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