一、准备工作
创建代码目录,依次执行以下操作
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