Hey mate, great tutorial. There is one shortcoming in this setup. You are no longer able to spread your nexus schema definition into multiple files. One of the big advantages of the nexus framework is that you no longer need to pull all the dependencies into the schema file manually. This continues to work on localhost:4000/graphql but it no longer works for localhost:3000/api/graphql. The latter endpoint only continues to work when all the objectType, queryType, mutationType, etc. are defined in graphql/schema.ts.
You can try by adapting your repo. Just try to put the objectType for user in a different file. It will break the localhost:3000/api/graphql while localhost:4000/graphql remains in tact. Do you know a workaround for this!
Hi there, thanks for the comment! I'm actually not able to reproduce this - perhaps you forgot to import the files where other parts of the schema are defined?
What I did:
Extracted the code for objectTypeUser to another file located at graphql/newFile.ts - next to the original schema.ts
Wrote import "./newFile.ts" at the beginning of graphql/schema.ts
Note that schema from Nexus (is a singleton I believe) is also imported in newFile.ts, and nothing is exported in that file. Here's what I have:
In JS/TS, if you import a file, it is scanned through and run by the interpreter, so schema.objectType() is actually executed when the interpreter is done with the line import "./newFile.ts", so it's not static.
you now have to write import statements for all schema related files in graphql/schema.ts.
If you do that then both GraphQL endpoints (localhost:4000/graphql + localhost:3000/api/graphql) work. However, when you omit the manual import statements in graphql/schema.ts it still continues to work at localhost:4000/graphql, however it no longer works for localhost:3000/api/graphql. For me not dealing with imports in graphql/schema.ts seemed like a nice behaviour of the nexus framework. I was trying to understand if I could avoid the import statements somehow in nextjs localhost:3000/api/graphql?
I'm not sure why it would continue to work with Nexus dev server's /graphql route, but my guess is that it's due to some caching not being invalidated by Nexus (probably a bug, I'll try to dig into it). The correct behavior should be it fails as well. :)
Edit: Normally, Nexus actually scans the entire project for import {schema} from 'nexus', if an entry point is not specified.
Hey mate, great tutorial. There is one shortcoming in this setup. You are no longer able to spread your nexus schema definition into multiple files. One of the big advantages of the nexus framework is that you no longer need to pull all the dependencies into the schema file manually. This continues to work on localhost:4000/graphql but it no longer works for localhost:3000/api/graphql. The latter endpoint only continues to work when all the objectType, queryType, mutationType, etc. are defined in graphql/schema.ts.
You can try by adapting your repo. Just try to put the objectType for user in a different file. It will break the localhost:3000/api/graphql while localhost:4000/graphql remains in tact. Do you know a workaround for this!
Hi there, thanks for the comment! I'm actually not able to reproduce this - perhaps you forgot to import the files where other parts of the schema are defined?
What I did:
objectType
User
to another file located atgraphql/newFile.ts
- next to the originalschema.ts
import "./newFile.ts"
at the beginning ofgraphql/schema.ts
Note that
schema
from Nexus (is a singleton I believe) is also imported innewFile.ts
, and nothing is exported in that file. Here's what I have:In JS/TS, if you import a file, it is scanned through and run by the interpreter, so
schema.objectType()
is actually executed when the interpreter is done with the lineimport "./newFile.ts"
, so it's not static.Yes, that's exactly what I am talking about,
you now have to write import statements for all schema related files in
graphql/schema.ts
.If you do that then both GraphQL endpoints (localhost:4000/graphql + localhost:3000/api/graphql) work. However, when you omit the manual import statements in
graphql/schema.ts
it still continues to work atlocalhost:4000/graphql
, however it no longer works forlocalhost:3000/api/graphql
. For me not dealing with imports ingraphql/schema.ts
seemed like a nice behaviour of the nexus framework. I was trying to understand if I could avoid the import statements somehow in nextjs localhost:3000/api/graphql?I'm not sure why it would continue to work with Nexus dev server's
/graphql
route, but my guess is that it's due to some caching not being invalidated by Nexus (probably a bug, I'll try to dig into it).The correct behavior should be it fails as well. :)Edit: Normally, Nexus actually scans the entire project for
import {schema} from 'nexus'
, if an entry point is not specified.I think the problem you are encountering is because somehow Nexus imported the external schema after the Nexus
app
has assembled. Actually, when working with Next.js, it's not recommended to have multiple files that import the same part (like use, schema) from Nexus.