胖蔡说技术
随便扯扯

nodejs基于express搭建接口服务

编写react时做了前后端分离的构建模式,那么就需要后端提供接口数据,决定使用nodejs编写简单的后端服务。本文主要是介绍了如何通过nodejs完成一个后端api的开发、调用、和线上部署的流程。希望能对大家有所作用。

本文转载自XUAO,版权归作者所有,本站仅做转载传播,点击可查看原文

nodejs server 编写

创建一个工程目录,我就取名叫 blog-server
cmd到这个工程目录下安装相关依赖:

npm install express
npm install hotnode
npm install mysql
npm install cors
npm install body-parser

新建一个index.js引入需要使用的组件包,这个index.js就作为即将可以使用的服务入口。

const cors = require('cors');
const bodyParser = require('body-parser');
const express = require('express');
const mysql = require('mysql');
const app = express();

app.use(cors()); // 解决跨域
app.use(bodyParser.json()); // 解析参数,json请求
app.use(bodyParser.urlencoded({ extended: true }));// 表单请求

开启端口监听,当浏览器或者其他工具访问http://localhost:8888/时,会被本服务监听到

app.listen(8888, () => console.log('server running at http://localhost:8888/'));

监听get请求,并返回一段html标签,监听地址为基地址

app.get('/', (req, res) => {
    res.send('<div style="color:red">error</div>')
})

get带参请求,并返回一段json数据,数据库查询的使用稍后再说

// 博客列表
app.get('/article-list', (req, res) => {

    // page=1&pageSize=10&classifyId=2
    var params = req.query

    var pageSize = 15;
    if (params.pageSize) { // 分页大小
        pageSize = params.pageSize;
    }

    var page = 1;
    if (params.page) { // 当前页数
        page = params.page;
    }

    var classifyId = '';
    if (params.classifyId) { // 分类id
        classifyId = '&& type=' + params.classifyId;
    }

    const data = {
        total: 0,
        blog: []
    }

    conn.query('select count(1) as total from ‘表名’ WHERE state=1 ' + classifyId + ';', (e1, r1) => {
        data.total = r1[0].total;

        if (e1) {
            // 此处返回一段json数据
            res.json(new Result({ code: 1, msg: "fail", data: e1 }))
            return
        }

        conn.query('SELECT * FROM ‘表名’ WHERE state=1 ' + classifyId + ' LIMIT ' + (page - 1) * pageSize + ',' + pageSize + ';', (e2, r) => {

            if (e2) {
                res.json(new Result({ code: 1, msg: "fail", data: e2 }))
                return
            }

            r.forEach(element => {
                element.content = element.content.substring(0, 100) + "..."
                data.blog.push(element)
            });

            res.json(new Result({ data: data }))
        })
    })
})

post带参请求,

// 发起留言
app.post('/leave-message', (req, res, next) => {

    console.log(req.body)

    var params = req.body;

    // 如果没有留言则不需要处理
    if (!params.message) {
        res.json(new Result({ code: 1, msg: "fail", data: params }))
        return
    }

    const post = {
        name: params.name,
        message: params.message,
        time: new Date().getTime()
    }

    conn.query('INSERT INTO ‘表名’ SET ?', post, (err, results) => {
        if (err) {
            console.log('err', err)
            res.json(new Result({ code: 1, msg: "fail", data: err }))
            return
        }
        res.json(new Result({ data: post }))

    })
})

封装的一个统一返回的最外层数据格式

function Result({ code = 0, msg = "success", data = null }) {
    this.code = code;
    this.msg = msg;
    this.data = data;
}

数据库的建立与连接

后端数据离不开数据库,nodejs连接远程数据库特别简单,先设置基础配置项,详情见注释

const option = {
    host: 'localhost', // 数据库所在地址,如果需要访问远程数据库,可以查询远程数据库配置,此处只要填写地址
    user: 'root', // 数据库用户名
    password: '123456', // 数据库访问密码,这里必填,如果数据库没有创建密码,到了这里就需要给root用户创建一个密码
    port: '3306', // 数据库开放端口
    database: 'blog', // 数据库名
    connectTimeout: 5000, // 连接超时时间
    multipleStatements: false // 不允许多sql语句执行,防止sql注入攻击,默认false
}

建立数据库连接,此时已经由第三方组件库帮我们把复杂的内容处理完了,用就可以了。

const conn = mysql.createConnection(option);

数据库查询语句

  conn.query('SELECT * FROM ‘表名’;', (e1, r) => {

        if (e1) {
            res.json(new Result({ code: 1, msg: "fail", data: e1 }))
            return
        }
        res.json(new Result({ data: r }))
    })

数据库插入,更多用法查阅 mysql 的具体使用文档

 const post = { // 需要插入数据的参数
        name: params.name,
        message: params.message,
        time: new Date().getTime()
    }

    conn.query('INSERT INTO ‘表名’ SET ?', post, (err, results) => {
        if (err) {
            console.log('err', err)
            res.json(new Result({ code: 1, msg: "fail", data: err }))
            return
        }
        res.json(new Result({ data: post }))

    })

重要配置

如果工程根目录下没有生成 package.json文件就新建一个并添加配置 dependencies 为导包版本所以此文件应该是自动生成的,如果生成此文件就修改配置,如下:

{
  "main":"index.js",
  "scripts": {
    "start": "hotnode index.js"
  },
  "dependencies": {
    "body-parser": "^1.19.0",
    "cookie-parser": "^1.4.5",
    "cors": "^2.8.5",
    "express": "^4.17.1",
    "hotnode": "^0.0.8",
    "multer": "^1.4.2",
    "mysql": "^2.18.1"
  }
}

运行

至此,一个简单的nodejs实现的后端服务基本完成,在控制台中输入启动命令:

npm start

最后在浏览器中访问 http://localhost:8888/ 即有数据返回,post请求方式可以使用postman测试。

备注

hotnode这个扩展库存在的目的是热更新,即每次修改代码后不需要重新启动

赞(0) 打赏
转载请附上原文出处链接:胖蔡说技术 » nodejs基于express搭建接口服务
分享到: 更多 (0)

请小编喝杯咖啡~

支付宝扫一扫打赏

微信扫一扫打赏