Node+express实现后台服务接口

一、准备工作

  创建代码目录,依次执行以下操作

  1.(若没有安装过)安装node

  2.npm init(package.json)

  3.安装express(请求)npm install express –save

二、编码

  1.http封装。http.js代码如下:

1 const express = require('express')
 2 const app = express()
 3 
 4 // 设置跨域
 5 app.all('*', (req, res, next) => {
 6   res.header('Access-Control-Allow-Origin', '*')
 7   res.header('Access-Control-Allow-Headers', 'X-Requested-With')
 8   res.header('Access-Control-Allow-Methods', 'PUT,POST,GET,DELETE,OPTIONS')
 9   res.header('X-Powered-By', '3.2.1')
10   res.header('Content-type', 'application/json;charset=utf-8')
11   next()
12 })
13 
14 // exports.app
15 module.exports = app

  2.模拟数据。这里先采用构造json数据结构的方式,data.js代码如下:

1 const res = [{
 2   data:213,
 3   num:444,
 4   age:12
 5 }, {
 6   data:456,
 7   num:678,
 8   age:13
 9 }]
10 
11 module.exports = res

  3.写接口。demo1.js代码如下

1 const app1 = require('../http')
 2 const res1 = require('./data')
 3 console.log(app1)
 4 // 接口1
 5 app1.get('/getTest1', (req, res) => {
 6   res.status(200)
 7   res.json(res1)
 8 })
 9 
10 // 配置服务端口
11 const server = app1.listen(3000, () => {
12   const host = server.address().address
13   const port = server.address().port
14   console.log('Listen at http://%s:%s', host, port)
15 })

  4.运行。3个文件相关路径自己视情况配置。运行demo1.js文件开启服务,node ./demo1/demo1.js。此时打开浏览器,在地址栏输入http://localhost:3000/getTest1,可以看到接口返回的结果。

三、扩展——mysql

  1.安装。npm install mysql -S

  2.引入mysql。另外req.body需要对表单数据进行解析,所以还需引入body-parser

   mysql.js如下:

// 创建数据库链接
const mysql = require('mysql')
// 注意隐私
const conn = mysql.createConnection({
  host: 'XXX',
  user: 'XXX',
  password: 'XXX',
  database: 'XXX'
})

// 注册 解析表单的body-parser
// const bodyParser = require('body-parser')
// conn.use(bodyParser.urlencoded({extended:false}))
module.exports = conn

    sql.js如下:

function sqls() {
  this.GETALL_SQL_NODETEST = 'select * from nodeTest where isdelete=0'
  this.GETBYID_SQL_NODETEST = 'select * from nodeTest where id=?'
}

module.exports = sqls

   3.编写接口

    demo2.js如下:

1 /* document.all.filter(e => {
 2   return e.style.font-family.toLowerCase().indexOf('yahei') > -1 || e.style.font-family.toLowerCase().indexOf('雅黑') > -1
 3 }) */
 4 const conn1 = require('../mysql')
 5 const sqls = require('./sql')
 6 const app = require('../http')
 7 
 8 // 注册 解析表单的body-parser
 9 const bodyParser = require('body-parser')
10 app.use(bodyParser.urlencoded({extended:false}))
11 
12 // 配置服务端口
13 const server = app.listen(3000, () => {
14   const host = server.address().address
15   const port = server.address().port
16   console.log('Listen at http://%s:%s', host, port)
17 })
18 
19 const sqlObj = new sqls()
20 
21 // getAll
22 app.get('/api/getAll', (req, res) => {
23   const sql = sqlObj.GETALL_SQL_NODETEST
24   console.log(sql)
25   conn1.query(sql, (err, result) => {
26     console.log(result)
27     if (err) return res.json({err_code: 0, msg: '查询失败', affectedRows: 0})
28     res.json({
29       err_code: 1, msg: result, affectedRows: 0
30     })
31   })
32 })
33 
34 // getById
35 app.get('/api/getById', (req, res) => {
36   const id = req.query.id
37   const sqlStr = sqlObj.GETBYID_SQL_NODETEST 
38   conn1.query(sqlStr, id, (err, results) => {
39       if(err) return res.json({err_code: 1, msg: '获取数据失败', affectedRows: 0})
40       if(results.length !== 1) return res.json({err_code: 1, msg: '数据不存在', affectedRows: 0})
41       res.json({
42           err_code: 1,
43           msg: results[0],
44           affectedRows: 0
45       })
46   })
47 })

    这里只列举了两个查询接口,其他接口暂不赘述。同理,运行demo2.js,调用接口,可以看到成功结果。

四、遇到的一些问题

  1.SyntaxError: Unexpected token export

  原因:export default res

  Node和浏览器端所支持的模块规范不同

  解决方法:module.exports = res

原文地址:https://www.cnblogs.com/hustshu/p/14777039.html