1

我在 Nuxt 2.15.4 上,store如果文件按fs-extra包存在于 nuxt 目录中,我想检查我的代码。

它在模块中很简单,因为我可以通过以下代码获取文件路径:

const path = require('path')
const fse = require('fs-extra');
const FilePath = path.join(this.options.rootDir, './static/myfile.json')
const fse = require('fs-extra');
fse.pathExists(FilePath, (err, exists) => {
    console.log(err) // => null
    console.log(exists) // => true
})

但是在vuex store我无权访问this.options.rootDir并且此代码始终返回false:

export const actions = {
  async nuxtServerInit({dispatch, commit}) {
    if(process.server){
      const fse = require('fs-extra');
      fse.pathExists('~/static/myfile.json', (err, exists) => {
        console.log(err) // => null
        console.log(exists) // => false
      })
    }
  }
}

如何获取文件完整路径或检查它是否存在?

#更新

看起来我的文件路径有一点错误,所以./static/myfile.json检查完成了!!

但是还有一个问题!!我有另一个 json 文件,当我尝试使用Object.assign(mainfile, myfile)它时它不起作用!

这是一个示例:

  async nuxtServerInit({dispatch, commit}) {
    let mainfile = require('../assets/mainfile.json')
    // if i use assign here it works and merge them together
    // let myfile = require('../assets/myfile.json')
    // Object.assign(mainfile, myfile)
    if(process.server){
      const fse = require('fs-extra');
      fse.pathExists('./static/myfile.json', (err, exists) => {
        if(exists){
          Object.assign(mainfile, myfile)
          commit('SET_FILE', mainfile); // this send the unmerged file to mutation
          console.log(mainfile); // but get the merged json here
        }
      })
      console.log(mainfile); // it is unmerged
    }
    console.log(mainfile); // it is unmerged
  }

4

2 回答 2

1

对于您更新的问题,请确保这exists是真实的,您正在进入循环并且采用mainfile您期望的格式。
然后,你可以做

mainfile = {...mainfile, ...myfile} // rather than Object.assign
于 2021-05-04T08:22:06.220 回答
1

好的,感谢@kissu,我发现了问题。正如kissu在他的回答评论中提到的那样,commit是同步的;我尝试了等待行动,但没有得到结果;所以我pathExistsSync改用并完成了!

  async nuxtServerInit({dispatch, commit}) {
    let myfile = {}
    let mainfile = require('../assets/mainfile.json')
    if(process.server){
      const fse = require('fs-extra');
      if(fse.pathExistsSync('./static/myfile.json')){
          myfile = require('../assets/myfile.json')
          Object.assign(mainfile, myfile)
      }
    }
    await dispatch('setMyFile', mainfile)
  }

#更新

require('../assets/mainfile.json')如果文件不存在,即使有if(fse.pathExistsSync('./static/myfile.json'))这样的语句,仍然会抛出错误:

  async nuxtServerInit({dispatch, commit}) {
    let myfile = {}
    let mainfile = require('../assets/mainfile.json')
    if(process.server){
      const fse = require('fs-extra');
      if(fse.pathExistsSync('./static/myfile.json')){
          myfile = readJsonSync('./static/myfile.json')
          Object.assign(mainfile, myfile)
      }
    }
    await dispatch('setMyFile', mainfile)
  }
于 2021-05-04T10:13:10.973 回答