我有一个在本地主机上运行良好的Next.js / Express / Apollo GraphQL应用程序。
我尝试将其部署在Zeit Now上,并且Next.js部分工作正常,但是GraphQL后端失败,因为/graphql
路由返回:
502: An error occurred with your deployment
Code: NO_STATUS_CODE_FROM_LAMBDA
我的now.json
如下:
{
"version": 2,
"builds": [
{ "src": "next.config.js", "use": "@now/next" },
{ "src": "server/server.js", "use": "@now/node" }
],
"routes": [
{ "src": "/api/(.*)", "dest": "server/server.js" },
{ "src": "/graphql", "dest": "server/server.js" }
]
}
建议?
答案 0 :(得分:0)
直到在Wes Bos闲置频道上找到解决方案之前,我一直遇到这个错误。
以下内容对我有用,但是您可能由于其他原因而收到该错误。
我不确定为什么它能起作用。
您可以看到它在here上运行
cd backend
npm install graphql-import
package.json
中的脚本:"deploy": "prisma deploy --env-file variables.env&& npm run writeSchema",
"writeSchema": "node src/writeSchema.js"
注意:对于非Windows用户,请确保在
&&
之前放置空格
src/writeSchema.js
:const fs = require('fs');
const { importSchema } = require('graphql-import');
const text = importSchema("src/generated/prisma.graphql");
fs.writeFileSync("src/schema_prep.graphql", text)
src/db.js
:const db = new Prisma({
typeDefs: __dirname + "/schema_prep.graphql",
...
});
src/createServer.js
:return new GraphQLServer({
typeDefs: __dirname + '/schema.graphql',
...
});
src/schema.graphql
:# import * from './schema_prep.graphql'
now.json
{
"version": 2,
"name": "Project Name",
"builds": [
{ "src": "src/index.js", "use": "@now/node-server" }
],
"routes": [
{ "src": "/.*", "dest": "src/index.js" }
],
"env": {
"SOME_VARIABLE": "xxx",
...
}
}
npm run deploy
以最初创建schema_prep.graphql
。now
另一个回复是这样的:
您不应混入graphql导入和js / ts导入。 graphql文件上的语法将由graphql-import解释,而将被ncc忽略(读取__dirname内容并将文件移至正确目录等的编译器) 在我的示例中,“ schema_prep.graphql”已经用生成的graphql文件中的导入进行了预处理。
希望这会有所帮助。
答案 1 :(得分:0)
这是在Zeit Now(作为无服务器功能/ lambda)和Heroku(与Express服务器一起)上运行的Next.js / Apollo GraphQL的完整示例:
https://github.com/tomsoderlund/nextjs-pwa-graphql-sql-boilerplate