node传递数据格式问题

小白求教~

//后端传递数据
app.post('/get-name',function(req, res) {
    sql.query('select stuName from student',function(err, row){
        if(err || row.length == 0) {
            console.log(err);
        } else {
            var stuname = {}
            for(var i = 0 ;i <row.length; i++) {
                stuname [i] = row[i].stuName;
            }
            console.log(stuname);
            res.send(stuname);
        }
    })
})

打印出来是图片描述

然后我v-for遍历

<ul><li v-for = "item in data">{{ item }}</li></ul> 

data (){
  return{
    data: ''
  }
},
mounted() {
  var that = this;
  this.$ajax.post('http://localhost:3000/get-name', this.$qs.stringify({
  })).then(res => {
    that.data = res.data;
  })
}

结果就是三个句号了。。。图片描述

我将var stuname = []做数组也不行,请求各位大佬指点。

PS:大佬如果有时间再帮我解决一下一个sessionstorage的问题,,,

图片描述


data (){
  return{
    name: sessionStorage.getItem('name')
  }
}

<span class="st-name">{{ name }}</span> 

这个span为什么没有变成A同学?


补充:首先谢谢各位的回答,白天我没时间看这个只有等到晚上才能继续弄,然后就是刚刚打开项目发现li里面有数据了,真是坑啊,,,,我什么都没有改,,,

然后第二个问题关于sessionstorage我一开始就设置了的,只是登陆成功之后一开始sessionstorage里面没有值,然后我要先点一下sessionstorage然后再点下面的localhost才会有值存进去,name是没有显示的。

this.$ajax.post('http://localhost:3000/login/stulogin',this.$qs.stringify({   
      })).then(res=>{
        if(res.data.code == 1){
          that.$message.success("验证通过");
          sessionStorage.setItem('name',res.data.sname);

补充我是登陆跳转页面然后存值的,参考上面代码,然后登陆进去之后下面这里还没有值,已经跳转了,我需要点击一下sessionstorage然后在点那个 http://localhost:8081 才会有A同学显示(最开始那张里面有A同学的值),然后既然里面已经有值了我就name就getitem获得这个A同学,然后span应该就有显示才对,但是没有显示。

图片描述

阅读 2.4k
4 个回答

有个问题,不要把数组存成JSON对象,你的问题可能和这个有关,我没试过v-for能不能遍历对象。按照js的语法的话你for-in遍历出来的是key而不是value。其次出现奇怪的问题你的第一反应应该是把奇怪的数据打印出来——你确实是打印出来了,但只在后端打印,没在前端打印,而你出问题的部分目前看来在前端。

你的第二个问题的原因是你没有正确使用sessionStorage,会话存储也是key-value结构的,从你的截图中看,你把一条记录的key设置成了“A同学”,value设置成了空串,存储中也确实没有name这个keyspan里当然不会有A同学了。具体使用方法参考w3cschool的教程即可。


看题主的描述,我猜测你是跳转了页面之后再往sessionStorage里存东西?还是先往sessionStorage里存东西再跳转页面?我试过后者,后者不会导致存储出现问题。看题主贴的代码sessionStorage.setItem('name',res.data.sname);,这个操作如果正常完成,一定会往sessionStorage里存入key为“name”,valueres.data.sname的值的记录,比如

sessionStorage.setItem('test', 'Rua');
sessionStorage.getItem('test');
// "Rua"

虽然题主找到了获取“A同学”的方法,但这没有从根本上解决问题,还是希望题主能先确认一下sessionStorage的功能正常,以及自己的用法的正确性。

1.截图看下前端取到的值是什么
2.设置的时候这样设置 sessionStorage.setItem('name', 'A同学'), 取值就可以像你写的那样取值了 sessionStorage.getItem('name')

1.不是数组,没有length,不能循环。

我将var stuname = []做数组也不行

做成数组是可以的,你可以贴下你改成数组的代码,或者给出你得到的数据。

2.没有setItem当然拿不到,一般也不用sessionstorage,因为浏览器打开一个新的标签页,sessionstorage是不共享的,当然这也可能是你的需求。

<ul><li v-for = "item in data">{{ item }}</li></ul> 

data (){
  return{
    data: ''
  }
},
mounted() {
  var that = this;
  this.$ajax.post('http://localhost:3000/get-name', this.$qs.stringify({
  })).then(res => {
    that.data = res.data;
  })
}

这个item里面是这样的,

{'0':'A同学','1':'B同学','2':'C同学'}

如果你是想展示出来,这样写应该是可以的

<ul>
    <li v-for = "item in data">
        <span v-for = "(value, key) in item">{{value.key}}</span>
    </li>
</ul> 

接着是你的存储问题


data (){
  return{
    name: sessionStorage.getItem('name')
  }
}

<span class="st-name">{{ name }}</span

从你的截图看,你的sessionStorage的key存的是'A同学',value是空,你如果是想取A同学出来,name要传变量,不是字符串 ‘name’。

name: sessionStorage.getItem('name')

改为

var key = 'A同学';
var name = sessionStorage.getItem(key);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题