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状态设置名称。我不能这样做,我这里有问题。现在你正在做的是将相同的名称返回给客户,这样名称就不会更改。服务器是否正确接收到您的请求?客户端中收到的响应是否正确?是请求和响应没有问题。效果很好。我们怎么改名字?