gpt4 book ai didi

javascript - 为什么我的 POST 请求不更新正在提供的 .json 或 .js 文件?

转载 作者:行者123 更新时间:2023-12-03 01:03:55 26 4
gpt4 key购买 nike

我知道我在这里遗漏了一些简单的东西。对我宽容一点。

我有一个 graphQL 后端,可提供以下服务:

const arr = [ { id: 1, foo: 'foo' }, { id: 2, foo: 'bar' }]

然后我通过 buildSchema() 发出 graphql 突变请求

type Mutation {
updateFooValue(id: Int!, foo: String!): MySchema
}

在我的 rootResolver 中我已经配置:

var root = {
getFooQuery: getFooFunc,
getFoosQuery: getFoosFunction,
updateFooValue: updateFooFunc,
};

然后我的 updateFooFunc 为:

var updateFooFunc = function ({ id, foo }) {
arr.map(each => {
if (each.id === id) {
each.foo = foo;
return each;
}
});
return arr.filter(each => each.id === id)[0];
}

这一切实际上在 localhost/graphiql UI 中运行良好,但是当我检查数组时它尚未更新。

昨天使用 fetch/REST post 请求时出现类似问题。 localhost/JSON 和立即获取请求都很好,但原始 .json 文件保持不变。显然意味着重新启动服务器 = 你会丢失任何新帐户/新聊天消息或其他任何内容 - 所以显然不是执行此操作的正确方法。

我错过了什么?

最佳答案

这里有几件事需要记住。

当您启动服务器时,仅当服务器运行时,像arr这样的变量才会保留在内存中。对变量值的更改只会更改内存中的内容 - 它不会更新实际代码中的内容。当您停止服务器时,变量值将从内存中释放。如果服务器再次启动,这些变量将再次具有您赋予它们的初始值。

通常,如果您想保留数据,则需要将其写入数据库或其他数据存储(例如 Redis)并从中读取数据。您还可以直接读取/写入文件(有关如何在节点中执行此操作的基本概述,请参阅 this page)。

顺便说一句,请务必记住,filtermap 等数组方法不会改变调用它们的数组的原始值。

const array = [1, 2, 3, 4]
array.map(item => item * 2)
console.log(array) // still shows [1, 2, 3, 4]
array.filter(item => item > 3)
console.log(array) // still shows [1, 2, 3, 4]

如果你想改变原来的值,你需要这样做:

let array = [1, 2, 3, 4] // use let since our value will not be *constant*
array = array.map(item => item * 2)
console.log(array) // now shows [2, 4, 6, 8]
array.filter(item => item > 3)
console.log(array) // now shows [4, 6, 8]

你也可以像这样链接你的方法

array = array.map(item => item * 2).filter(item => item > 3)

把它们放在一起,如果您希望解析器只从文件中读取和写入,它看起来像这样:

const fs = require('fs')

const updateFooFunc = ({ id, foo }) => {
// assuming foo.json exists
const valueFromFile = JSON.parse(fs.readFileSync('./foo.json'))
const newValue = valueFromFile.map(each => {
if (each.id === id) each.foo = foo
return each
})
fs.writeFileSync(JSON.stringify('./foo.json', newValue))
// "find" is a little better than "filter" for what you're doing
return newValue.find(each => each.id === id)
}

关于javascript - 为什么我的 POST 请求不更新正在提供的 .json 或 .js 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52496304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com