大兵马元帅 发表于 2021-8-18 16:02

nodejs接收get请求后获取mysql数据返回到前端

数据库根据前端传过来的参数获取到数据后,无法传回到前端,自己琢磨的一天了,谢谢各位老师!
后端代码:
router.get('/check', async (ctx, next) =>{
    let datt=ctx.url;   
    let dat=datt.replace("&","=")
    let ks=dat.split("=")
    let js=dat.split("=")
    let sql="SELECT * FROM 8month_yhgcj WHERE 日期 BETWEEN ? AND ?"
    db.query(sql, ,function (err, result) {
      if (result.length>0) {
            result = JSON.stringify(result);
            console.log(result);
            
            
      } else {
            console.log("数据库没内容");
      }   
      
      
    });
    ctx.body = result
   
    // console.log(result);
});


前端代码:
wx.request({
      url: 'http://127.0.0.1:8089/check',
      data: {STDATA:'2021-08-11',ENDATA:'2021-08-17'},
      method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
      header: {
      'content-type': 'application/json'
      },
      success: function(res){
       // success
       console.log(res)
      },
      fail: function() {
       // fail
      },
      complete: function() {
       // complete
      }
   })

},

含笑阁 发表于 2021-8-18 16:02

你要写道查询的里面,查询那里是异步的。 (而且为啥是ctx,和next不是res和req,是我老了吗)
router.get('/check', async (ctx, next) =>{
    let datt=ctx.url;   
    let dat=datt.replace("&","=")
    let ks=dat.split("=")
    let js=dat.split("=")
    let sql="SELECT * FROM 8month_yhgcj WHERE 日期 BETWEEN ? AND ?"
    db.query(sql, ,function (err, result) {
      if (result.length>0) {
            result = JSON.stringify(result);
            console.log(result);
            
            
      } else {
            console.log("数据库没内容");
      }   
         ctx.body = result
         
    });
   
   
    // console.log(result);
});

大兵马元帅 发表于 2021-8-18 16:14

现在实现不了,如果把
ctx.body = result换成ctx.body = “1234” 就可以返回1234,但是前面数据库获取的result怎么不能返回到前端啊

copy1024 发表于 2021-8-18 16:19

看看是不是 async 和 await 的问题,一般需要同时搭配使用,或者同时不使用

大兵马元帅 发表于 2021-8-18 16:20

copy1024 发表于 2021-8-18 16:19
看看是不是 async 和 await 的问题,一般需要同时搭配使用,或者同时不使用

我自己也猜测是同步、异步的问题,但是我自己不会啊{:1_937:}

zhou773 发表于 2021-8-18 16:24

执行 send 方法
router.post('/getbannerb', function(req, res, next) {
    let { position }= req.body;
    if(position=== '1'){
      let queryString = "select * from banner_b";
      db.query(queryString, function(err, rows){
            if (err) {
                res.send(err);
            }else {
                dataBox.code = 200;
                dataBox.msg = '成功';
                dataBox.data = rows;
                req.session.username = req.body.username;
                res.send(dataBox);
            }
      })
    }else {
      let queryString = "select * from banner_s";
      db.query(queryString, function(err, rows){
            if (err) {
                res.send(err);
            }else {
                dataBox.code = 200;
                dataBox.msg = '成功';
                dataBox.data = rows;
                req.session.username = req.body.username;
                res.send(dataBox);
            }
      })

    }
});

大兵马元帅 发表于 2021-8-18 16:31

含笑阁 发表于 2021-8-18 16:24
你要写道查询的里面,查询那里是异步的。 (而且为啥是ctx,和next不是res和req,是我老了吗)


不好意思,我是刚接触,见效了,按你说的方法,还是获取不到:'(weeqw

大兵马元帅 发表于 2021-8-18 16:33

zhou773 发表于 2021-8-18 16:24
执行 send 方法
router.post('/getbannerb', function(req, res, next) {
...

你好,你这是post请求吗?我看着有点乱,可以在我的代码基础上做修改吗?谢谢:'(weeqw

含笑阁 发表于 2021-8-18 16:36

大兵马元帅 发表于 2021-8-18 16:31
不好意思,我是刚接触,见效了,按你说的方法,还是获取不到

你把ctx.boy 那行换一下
改成 ctx.send(result)
可以参考楼长的代码

大兵马元帅 发表于 2021-8-18 16:41

含笑阁 发表于 2021-8-18 16:36
你把ctx.boy 那行换一下
改成 ctx.send(result)
可以参考楼长的代码

按你说的,换了一行代码,在两个地方都换了,也是都不行,返回内容见图片{:1_937:}
页: [1] 2 3 4
查看完整版本: nodejs接收get请求后获取mysql数据返回到前端