node 接口编写(简单)

这里我也就不废话了,这里我就不讲数据爬取了,直接给大家展示

这里我会将一个整体的接口分为几个单独的模块,进行封装(为了以后多功能的处理,防止出错后,不方便查找),这里我使用的是http 不是express

数据库的链接(mysql模块.js)
数据库的链接我单独放在一个js文件里面(mysql模块.js)

// 导入mysql模块
var mysql = require('mysql');

// 创建数据库连接
var connection = mysql.createConnection({
  host     : 'localhost',  // 主机名
  user     : 'root',  // 用户名
  password : '123456',  // 数据库密码
  database : 'test'  // 数据库名
});
//将该方法暴露出来,让别的文件可以调用该方法
module.exports = (sql, callback) => {
    connection.query(sql, (error, results, fields) => {
        if (error) throw error;
        callback(results);//将得到的数据返回
    })
}

module.exports与exports的区别
exports是引用 module.exports的值。module.exports 被改变的时候,exports不会被改变,而模块导出的时候,真正导出的执行是module.exports,而不是exports

中间层代码(zhong模块.js)

需要导入的模块

const query = require("./mysql模块")

导入封装的js文件

const fs = require("fs")

引入读写模块,为了下面静态资源的读取

const path = require("path")

同样也是为了静态文件的读取

const querystring = require("querystring")

对http请求所带的数据进行解析

// 后端路由  
// 后端路由指的是 url跟相关逻辑的对应关系
// 后端写接口  也就是写路由

// 导入数据库模块
const query = require("./mysql模块")//导入封装的js文件
const fs = require("fs");//引入读写模块,为了下面静态资源的读取
const path = require("path");//同样也是为了静态文件的读取
const querystring = require("querystring");//对http请求所带的数据进行解析


// 定义暴露的方法
module.exports = (request, response) => {
    let reqUrl = request.url;//前端传来的url,其实这是后端定义,
    //给前端的,所以在想这个问题时,应该是先从后端想起,我能应该抛弃前端的思维
    const reqMed = request.method;//获取请求方式
    const url = new URL("http://" + request.headers.host + reqUrl);//获取url
    //判断前端ajax传入的url是否满足条件,后面get可省略,默认为get请求
    if (reqUrl == "/list" && reqMed == "GET") {
        // 调用mysql模块.js中暴露的方法  查询数据库 查在herolist表里面的数据
        query("select * from herolist", results => {
        //将数据处理后传回前台  转换为 JSON 字符串
            response.end(JSON.stringify(results))
        })
    } 
    //同样是判断
    else if (url.pathname == "/detail") {
   // 获取前端传入url中的id值 ,将该值用来进行接下来的查找
        const heroId = url.searchParams.get("id");
        //调用mysql模块.js中暴露的方法
        query(`select * from herolist where Id=${heroId}`, results => {
        //这里是让后台传回去的数据再进行处理,方便前台调用
            response.end(JSON.stringify(results[0]))
        })
    } else if (reqUrl == "/addHero" && reqMed == "POST") {
        let str = "";
        //因为数据是以流的形式传输的所以这里进行拼接
        request.on("data", chunk => {
            str += chunk;
        })
        //传输完毕后执行
        request.on("end", () => {
        //将一个字符串反序列化为一个对象。
            const postData = querystring.parse(str);
            query(`insert into herolist (heroname, heroIcon) values ('${postData.heroName}', '${postData.heroIcon}')`, results => {
                response.end(JSON.stringify({
                //这里是为了给前端返回数据,证明我数据库处理完毕
                    status: 200,
                    msg: "添加成功"
                }))
            })
        })
    } else {
        // 读取静态资源,
        fs.readFile(path.join(__dirname, "views", reqUrl), (err, data) => {
            if (!err) {
                // 存在当前路径
                response.end(data);
            } else {
                response.end("404");
            }
        })
    }

}

querystring.parse
parse这个方法是将一个字符串反序列化为一个对象。

http模块(index.js)

// 1. 读取静态资源
const http = require("http");
const router=require("./中模块")
// 搭服务器
const server = http.createServer((request, response) => {
    router(request, response)
})

// 服务器监听
server.listen("4399", () => {
    console.log("start");
})

上面三个js文件就是整个接口的组成,我们学习接口的目的并不是让我们去公司写接口,写接口终归是后端的事情,而且我们学的也只是皮毛,我们主要是养成一个习惯,让我们了解后端的操作,方便以后去了公司,我们跟后端进行合作,有什么不会的可以私信我,我会一一回复,

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值