尝试使用NodeJS开启本地服务, 并解决跨域问题.

思路: 

  • 导入node内置模块'express'
  • 使用express(), 创建app实例(web服务器)
  • app.listen启动服务器, 监听端口80
  • 编写接口get请求/post请求
  • 引入cors跨域中间件, 全局注册
  1. 创建项目文件夹project, 新建service.js入口文件(用于启动服务也是接口的入口).引入express并创建app实例,启动一个服务器:
    // 导入 express
    const express = require('express')
    // 创建服务器的实例对象
    const app = express()
    
    // 启动服务器
    app.listen(80, () => {
        console.log('api server running at http://127.0.0.1:8089')
    })

    执行node .\service.js, 可以看到打印内容, 服务启动成功

  2. 引入express内置路由模块router, 定义接口地址.当进入路由接口后,使用send返回成功信息,定义好接口后使用use将router中间件挂载到app上。
    // 导入 express
    const express = require('express')
    // 创建服务器的实例对象
    const app = express()
    const router = express.Router() //定义路由模块
    router.get('/get', (req,res)=>{
        res.send({
            code:1,
            msg:"GET请求成功",
            date: body
        })
    })
    router.post('/post', (req, res) => {
        const body = req.body
        res.send({
            code:1,
            msg:"POST请求成功",
            date: body
        })
    })
    app.use(router)
    // 启动服务器
    app.listen(80, () => {
        console.log('api server running at http://127.0.0.1:8089')
    })

    访问地址:http://127.0.0.1:80/get 能看到返回结果. 但当我们在其他地址访问接口时, 会发现接口报跨域, 这时就需要用到cors模块                            

  3. 导入cors跨域中间件, 并全局注册

    //导入cors跨域中间件
    const cors = require("cors")
    // 全局注册,加前缀
    app.use(cors())

    到此我们配置的接口就能正常访问了, 但是后面发现, 若是post请求, 接口无法接收到客户端请求的数据. 这里尝试引入了body-parser模块

  4. 通过npm install body-parser命令安装模块后,可以通过以下方式获取模块引用:
    const bodyParser = require('body-parser')
    //创建 application/x-www-form-urlencoded 解析
    app.use(bodyParser.urlencoded({ extended: false }))
    //解析 JSON格式
    app.use(bodyParser.json())

    body-parser也能够解析二进制格式,、文本格式, 这里就不一一赘述了

  5. 到此一个简单的node服务我们启动成功了, 下面记录一下具体代码, 以备后续用到.

 目录:

 

service.js:

// 导入express
const express = require('express')
// 创建web服务器
const app = express()
const bodyParser = require('body-parser')

// 启动文本服务器
app.listen(5000, () => {
    console.log("80服务器启动http://127.0.0.1/")
})
//配置解析表单数据的中间件
app.use(express.urlencoded({
    extended: false
}))

//导入cors跨域中间件
const cors = require("cors")
// 全局注册,加前缀
app.use(cors())
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
// 导入路由模块
const router = require('./app')
// 全局注册,加前缀
app.use('/api', router)

app.js

// 导入express
const express = require('express')

const fs = require('fs')
// 创建路由对象
const router = express.Router()
// 编写接口
router.get('/getData', (req, res) => {
    fs.readFile('data.json', 'utf-8', (err, data)=>{
      if (err) {
        console.log('读取文件时发生错误!')
      }
      const json = JSON.parse(data)
      console.log(json)
      // 2.调用res.send()方法,把数据返回给客户端
        res.send({
          code: 1,
          msg:"请求成功!",
          data: json
      })
    })
    
})

router.post('/postData', (req, res) => {
    // 1.获取客户端通过查询字符串,发送到服务器的数据
    const body = req.body
    let backData = []
   
    // backData.push
    // 增量写入
    fs.readFile('./data.json', 'utf8', (err, info)=>{
      if (err) console.log('文件读取失败!' + err.message)
      let backData = [...JSON.parse(info)]
      console.log('文件读取成功!')
      if (body && body.url) {
        if (backData && backData.length > 0) {
          let index = backData.findIndex((item)=>item.url == body.url)
          console.log(index, '------------------------------')
          if (index >= 0) {
            backData[index] = body
          }else {
            backData.push(body)
          }
        }else {
          backData.push(body)
        }
      }
      fs.writeFileSync('./data.json', JSON.stringify(backData), 'utf8');
      console.log('文件写入成功', body.url);
    })
     // 2.调用res.send()方法,把数据返回给客户端
    res.send({
        code:1,
        msg:"POST请求成功111111111111",
        date: backData
    })
})

//向外共享路由对象
module.exports = router

由于没有连接数据库, 这里用到了fs模块 用于读写文件, 将需要保存的数据存到json文件中 

  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值