Javascript 使用apollo express限制或过滤graphql查询
我是graphql新手。我正在用graphql在后端构建一个react站点。我试图找出如何限制解析程序返回的对象或项的数量。文档非常稀少,我没有看到过滤、限制或排序的清晰示例 我的索引文件如下所示:Javascript 使用apollo express限制或过滤graphql查询,javascript,reactjs,graphql,graphql-js,express-graphql,Javascript,Reactjs,Graphql,Graphql Js,Express Graphql,我是graphql新手。我正在用graphql在后端构建一个react站点。我试图找出如何限制解析程序返回的对象或项的数量。文档非常稀少,我没有看到过滤、限制或排序的清晰示例 我的索引文件如下所示: import express from "express"; import mongoose from "mongoose"; import {ApolloServer, gql} from "apollo-server-express"; import {resolvers} from "./re
import express from "express";
import mongoose from "mongoose";
import {ApolloServer, gql} from "apollo-server-express";
import {resolvers} from "./resolver"
import {typeDefs} from "./typeDefs"
const bodyParser = require('body-parser');
const server = async () => {
const app = express();
app.use(bodyParser.json());
app.use((req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'POST,GET,OPTIONS');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
if (req.method === 'OPTIONS') {
return res.sendStatus(200);
}
next();
});
const server = new ApolloServer({
typeDefs,
resolvers
})
server.applyMiddleware({app})
await mongoose.connect("mongoaddr...",{useNewUrlParser:true})
app.get('/', (req,res)=> res.send('hello'))
app.listen({port:4001}, ()=>{
console.log('connected')
})
}
server()
我的模型:
import mongoose from "mongoose";
export const Post = mongoose.model("Post",{
word:String,
)
我的typeDefs:
import {gql} from "apollo-server-express";
export const typeDefs = gql`
type Query{
getPosts(limit:Int):[Post!]!
}
type Post {
id:ID!
word: String!
}
我的解析器:
import { Post } from "./models/Post";
export const resolvers = {
Query:{
async getPosts(_,{ limit },context){
const post = Post.find()
console.log(limit)
return(post)
}}
}
Mutation:{...}
我完全不明白如何限制getPosts查询。使用Posts.find,我可以获取网站中的所有项目,但当我使用console.log时,它会为我提供大量元数据
有谁能举例说明如何根据我的情况过滤前10个对象吗。我正在筛选的数据是在mongo db中。基本上是一个标准的json,比如:
{
"data": {
"getPosts": [
{
"word": "test"
},
{
"word": "test1"
}
]
}
}
它与grapql毫无关系!您必须对从mongoose模型中获取的文档数组进行切片。在您的情况下,getPosts函数将返回一个Post文档数组。因此,您只需切片并返回数组
异步getPosts{limit},上下文{
const post=post.find
返回post.0,限制
}}
或者更好的是,您可以使用猫鼬限制:
就是这样使用mongo限制-检查文档,传递参数非常感谢!我已经偶然发现了。我不明白为什么人们对我的问题或你的答案投了反对票,因为这是正确的。一个graphql中的noob,仅仅跟随一些youtube教程来运行,假设它知道这一点。find是一种特定的mongoose语法吗?只需要知道解析器使用猫鼬语言。无论如何谢谢你!
async getPosts(_,{ limit },context){
const post = Post.find().limit(limit)
return post
}}