node.js接口开发(一)

2,447 阅读4分钟

这次开发的是新闻管理系统,因为这是实训作业,时间仓促很多功能并没有完善,但是两周的实训还是学会不少东西的,感觉有必要先整理一下这些知识。先附上GitHub地址,这里是整个项目的地址,后面有时间还需要再继续完善。

一、运行nodejs

先配置好node和npm,网上教程很多,这里就不说了,在cmd中运行node -v和npm -v如果分别跳出node和npm版本号,就证明已经配置好了。

  • 先新建一个文件夹,随便起个名字,在该文件目录下输入
npm init -y

后面更的-y是使用默认配置,如果需要自己配置一些属性,把-y去掉然后按照命令行出来的提示输入信息即可。初始化完成后会出现一个package.json文件,内容如下

{
  "name": "my-test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

name的值就是文件夹的名字,main的值是node运行的主文件,这里默认是index.js,当项目开始debug的时候会先从main对应的js文件开始,那么就新建一个index.js 这里先附上我的index.js代码

const http = require("http");
const querystring = require("querystring")

const server = http.createServer((req, res) =>{
    const method = req.method;
    const url = req.url;
    const path = url.split("?")[0];
    const query = querystring.parse(url.split("?")[0]);
    
    //返回格式为json
    res.setHeader('Content-type','application/json');

    //返回的数据
    const resData = {
        method,
        url,
        path,
        query
    }

    //返回
    if(method === "GET"){
        res.end(
            JSON.stringify(resData)
        )
    }

    if(method ==="POST"){
        let postDate = '';
        req.on('data', chunk => {
            postDate +=chunk.toString();
        })
        req.on('end', () => {
            resData.postDate = postDate;
            res.end(
                JSON.stringify(resData)
            )   
        })
    }
})

server.listen(3000, () => {
    console.log("3000 pro");
})

首先导入http,querystring,http是必须导入的服务文件,querystring是用来解析url的 之后调用http的方法createServer创建一个服务

const server = http.createServer((req, res) =>{
    
}

这里有两个参数req和res。req是客户端向服务端发送的一些数据,服务端可以通过res来向客户端返回一些数据;

server.listen(3000, () => {
    console.log("3000 pro");
})

最后用通过3000端口来发布服务;

这时侯命令行中输入

node index.js

3000 pro 就是代码中打印的数值

    const method = req.method;
    const url = req.url;
    const path = url.split("?")[0];
    const query = querystring.parse(url.split("?")[0]);
    
    //返回格式为json
    res.setHeader('Content-type','application/json');

    //返回的数据
    const resData = {
        method,
        url,
        path,
        query
    }

    //返回
    if(method === "GET"){
        res.end(
            JSON.stringify(resData)
        )
    }

因为通过路由来传递的都是get请求,服务端通过url中的参数来进行一些关于数据库的操作,这里不连接数据库,就先返回处理后的url上述代码放入createServer中,然后再本地输入http://localhost:3000/api?id=1,就可以看如下页面了

我们尝试改变url就可以看见返回参数的变化了

还要post请求,不能通过url来传递,如果要测试的话可以下载一个postman,一个很方便的谷歌插件

if(method ==="POST"){
        let postDate = '';
        req.on('data', chunk => {
            postDate +=chunk.toString();
        })
        req.on('end', () => {
            resData.postDate = postDate;
            res.end(
                JSON.stringify(resData)
            )   
        })
    }

这里相比get请求多了个chunk,他的用处就是让通过post闯过来的数据变成想水流一个,一点一点的传递过来,因为有时候post请求的数据量会比较打,这样可以保证serve端的流畅性。

  • 有了这些基础,前端就可以通过Ajax请求来接收到这些数据了,当然现在肯定还不行,因为会有跨域的问题,如果在react或者vue中,这个接口暂时还是用不了的,等处理了跨域的问题才能时候,在之后的总结中我会说到

二、连接MySQL

  • 可能很多人会使用mongodb,开发起来非常方便,但其实MySQL也不麻烦,这个项目里用到的是MySQL数据库 先下载依赖库mysql,在命令行中输入
npm install mysql 

先附上代码

const mysql = require('mysql');

const con = mysql.createConnection({
    host: "localhost",//服务地址
    user: "root",//mysql用户名
    password: "7777",//mysql的密码
    port: "3306",//mysql的端口号,默认是3306
    database: "news"// 连接的数据库名称
})





con.connect()

const sql = "select * from users"
con.query(sql, (err, result) => {
    if  (err) {
        console.log(err);
        return
    }

    console.log(result)
})

con.end()

mysql.createConnection里面的是mysql的一些配置,具体信息写在注释里了

如下图为创建的数据库

在命令行中输入

node index.js

现在已经完成了通过node.js连接数据库以及发布接口,下一步就是怎么把这两块连起来,把数据库里的数据通过接口的方式传递给前端。为什么现在不放在一起呢?下一篇我会说到,为了加强代码的逻辑性,有些部分需要拆分开来写。