Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从Node.js访问Vuex存储?_Javascript_Node.js_Vue.js_Express_Vuex - Fatal编程技术网

Javascript 如何从Node.js访问Vuex存储?

Javascript 如何从Node.js访问Vuex存储?,javascript,node.js,vue.js,express,vuex,Javascript,Node.js,Vue.js,Express,Vuex,我必须从服务器访问一个状态。我想在从中找出答案后,用一个突变来更改twitterName。我设置了一个getter,但当我尝试将存储导入js文件时,它会发送错误。如何导入状态 server/index.js const express = require('express') const bodyParser = require('body-parser') const cors = require('cors') const path = require('path') const app

我必须从服务器访问一个状态。我想在从中找出答案后,用一个突变来更改
twitterName
。我设置了一个getter,但当我尝试将存储导入js文件时,它会发送错误。如何导入状态

server/index.js

const express = require('express')
const bodyParser = require('body-parser')
const cors = require('cors')
const path = require('path')

const app = express()
app.use(bodyParser.json())
app.use(cors())

const tweets = require('./routes/api/tweets')
const twitterName = require('./routes/api/name')

app.use('/api/tweets', tweets)
app.use('/name/', twitterName)

if (process.env.NODE_ENV === 'production') {
  app.use(express.static(__dirname + '/public/'))
  app.get(/.*/, (req, res) => res.sendFile(__dirname + '/public/index.html'))
}

const port = process.env.PORT || 8081

app.listen(port, () => console.log(`Server started on port ${port}`))

server/name.js

const express = require('express')
const router = express.Router()

router.get('/:twitterName', (req, res) => {
  const name = req.params.twitterName
  res.status(200).send(name)
})

module.exports = router


store.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    twitterName: 'name1234'
  },
  
  getters: {
    twitterName: (state) => state.twitterName
  }
  
  actions: {
    updateId({ commit }, id) {
      commit('setId', id)
    },
    async getTweetData({ state }) {
      const res = await axios.get('http://localhost:8081/name/' + state.twitterName)
      // do what you want with the data
    }
  },
})

您不能在express服务器中使用客户端的存储,原因很简单,应用程序客户端使用的所有数据(包括vuex存储)都保存在浏览器中,并且您无权在服务器中访问它。这不是实现目标的正确方法

如果要使用来自客户端的数据,需要将其发送到服务器,以便在那里使用。因此,如果您需要twitterName,您可以具体执行以下操作:

router.get('/tweets/:twitterName',(req,res)=>{
//常量名称='name123'
const name=req.params.twitterName
T.get(
“搜索/推文”,
{from:name,count:5},
功能(错误、数据、响应){
如果(错误){
返回res.status(400.json('Oops!出了点问题。'))
}
data.twitterName=“”
资源状态(200).发送(数据)
}
)
})
从vuejs商店:

操作:{
异步getTweetData({state,commit}){
const res=await axios.get('/'+state.twitterName)
提交('setTwitterName',res.data.twitterName)
} 
},
突变:{
setTwitterName(状态,newWitterName){
state.twitterName=newWitterName
}
}

为什么不能在到达浏览器时更新状态?我想更改其他状态的名称。首先,非常感谢您的回答。我明白主要的事情,但我不明白我如何使用这个。我尝试了你的建议,但失败了:)我添加了我的server/index.js文件,所以你能检查一下并再次帮助我吗?你能更具体一点吗?到底是什么不起作用?你能添加所有新的相关代码吗?我简化了代码并添加到这里。所以我们得到了名为localhost.8081/name/…的后端服务器。我可以在屏幕上看到我写入url的内容,所以这里一切正常。我想用twitterName从vuex状态设置名称。我不能这样做,我这里有问题。现在你正在做的是将相同的名称返回给客户,这样名称就不会更改。服务器是否正确接收到您的请求?客户端中收到的响应是否正确?是请求和响应没有问题。效果很好。我们怎么改名字?