在 graphql-http
中使用任何 Express 中介軟體都很簡單。特別是,這是一個處理驗證的絕佳模式。
若要將中介軟體與 GraphQL 解析器一起使用,只需像使用一般 Express 應用程式一樣使用中介軟體即可。然後,request
物件會在任何解析器中作為第二個參數提供。
例如,假設我們希望伺服器記錄每個請求的 IP 位址,而且我們還想撰寫一個傳回呼叫者 IP 位址的 API。我們可以使用中介軟體來執行前者,並透過在解析器中存取 request
物件來執行後者。以下是實作此功能的伺服器程式碼
var express = require("express")var { createHandler } = require("graphql-http/lib/use/express")var { buildSchema } = require("graphql")
var schema = buildSchema(` type Query { ip: String }`)
const loggingMiddleware = (req, res, next) => { console.log("ip:", req.ip) next()}
var root = { ip: function (args, request) { return request.ip },}
var app = express()app.use(loggingMiddleware)app.all( "/graphql", createHandler({ schema: schema, rootValue: root, graphiql: true, }))app.listen(4000)console.log("Running a GraphQL API server at localhost:4000/graphql")
在 REST API 中,驗證通常使用標頭處理,其中包含驗證權杖,以證明是哪個使用者提出此請求。Express 中介軟體會處理這些標頭,並將驗證資料放在 Express request
物件上。一些像這樣處理驗證的中介軟體模組包括 Passport、express-jwt 和 express-session。這些模組每個都可與 graphql-http
搭配使用。
如果您不熟悉任何這些驗證機制,我們建議使用 express-jwt
,因為它簡單,且不會犧牲任何未來的彈性。
如果您已逐行閱讀文件到此,恭喜!您現在已具備建立實用的 GraphQL API 伺服器所需的一切知識。