如何解决如何在graphql
我创建了两个文件
index.js
const {ApolloServer,gql} = require('apollo-server');
const fs = require('fs');
const path = require('path');
const typedefs = gql`
type Query {
info: String!
ask: [Person!]
}
type Person {
name: String!
age: Int!
}
`;
const resolvers = {
Query: {
info: () => `Hello World from Linux Fan`,ask: () => {
return [fs.readFileSync(__dirname+path.join('/db.db'),'utf-8')]
}
}
}
const server = new ApolloServer({
typedefs,resolvers
}).listen().then(({url}) => console.log(url)).catch(err => console.log(err));
db.db
{
name:"Linux Age",age: 19
}
{
info
ask{
name
}
}
存在问题,说
“不能为不可为空的字段 Person.name 返回空值”
如何解决??
解决方法
根据 Node.js 文档 (https://nodejs.org/api/fs.html#fs_fs_readfilesync_path_options),fs.readFileSync() 返回字符串或缓冲区。然而,从模式中, ask() 返回一个 Person 类型的数组,它是一个对象。 fs.readFileSync() 的结果应该在返回之前转换为对象:
ask: () => {
const person = JSON.parse(JSON.stringify(
fs.readFileSync(__dirname + path.join('/db.db'),'utf-8').toString()
));
return [person];
}
请注意,我在使用 JSON.parse() 解析它之前调用了 JSON.stringify()。原因是文件 db.db 有一个 javascript 对象(键,只有名称和年龄,周围没有双引号)而不是 JSON 对象(带引号的键,如下所示):
{
"name":"Linux Age","age": 19
}
否则,JSON.parse() 在解析无效的 JSON 格式时会出现问题:
{
name:"Linux Age",age: 19
}
另外,需要调用readFileSync()后的toString()将Buffer转换为字符串:
fs.readFileSync(__dirname + path.join('/db.db'),'utf-8').toString()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。