【问题标题】:How can I access Vuex Store from Node.js?如何从 Node.js 访问 Vuex Store?
【发布时间】:2021-07-26 19:44:58
【问题描述】:

我必须从服务器访问一个状态。从中弄清楚后,我想用突变更改twitterName。我设置了一个吸气剂,但是当我尝试将商店导入 js 文件时,它会发送错误。如何导入状态?

服务器/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}`))

服务器/名称.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
    }
  },
})

【问题讨论】:

  • 状态到达浏览器时为什么不能更新?
  • 我想从另一个州改名。

标签: javascript node.js vue.js express vuex


【解决方案1】:

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

如果您想使用来自客户端的数据,您需要将其发送到您的服务器,这样您就可以在那里使用它。所以如果你特别需要twitterName,你可以这样做:

router.get('/tweets/:twitterName', (req, res) => {
  // const name = 'name123'
  const name = req.params.twitterName
  T.get(
    'search/tweets',
    { from: name, count: 5 },
    function (err, data, response) {
      if (err) {
        return res.status(400).json('Oops! Something went wrong.')
      }
      data.twitterName = '<new-name>'
      res.status(200).send(data)
    }
  )
})

来自 vuejs 商店:

actions: {
   async getTweetData({ state, commit }) {
       const res = await axios.get('<your-server-ip>/' + state.twitterName)
       commit('setTwitterName', res.data.twitterName)
   } 
},
mutations: {
   setTwitterName(state, newTwitterName) {
       state.twitterName = newTwitterName
   }
}

【讨论】:

  • 首先非常感谢您的回答。我了解主要内容,但我不明白如何使用它。我尝试了您的建议,但失败了 :) 我添加了我的 server/index.js 文件,请您检查一下并再次帮助我吗?
  • 你能说得更具体点吗?究竟是什么不起作用?你能添加所有新的相关代码吗?
  • 我简化了代码并在此处添加。所以我们得到了名为 localhost.8081/name/... 的后端服务器。我可以在屏幕上看到我写入 url 的内容,所以这里一切正常。我想用 twitterName 从 vuex 状态设置名称。我不能这样做,我在这里遇到了问题。
  • 现在您正在做的是将相同的名称返回给客户端,这样名称就不会改变。您的请求是否在服务器中正确接收?客户端收到的响应是否正确?
  • 是的,请求和响应没有问题。效果很好。我们如何更改名称?
猜你喜欢
  • 2021-07-06
  • 1970-01-01
  • 2019-12-06
  • 2019-05-19
  • 2023-03-18
  • 2018-09-15
  • 2021-08-27
  • 2021-02-23
  • 2019-04-05
相关资源
最近更新 更多