GraphQL 標誌GraphQL

驗證和 Express 中介軟體

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 物件上。一些像這樣處理驗證的中介軟體模組包括 Passportexpress-jwtexpress-session。這些模組每個都可與 graphql-http 搭配使用。

如果您不熟悉任何這些驗證機制,我們建議使用 express-jwt,因為它簡單,且不會犧牲任何未來的彈性。

如果您已逐行閱讀文件到此,恭喜!您現在已具備建立實用的 GraphQL API 伺服器所需的一切知識。

繼續閱讀 →建構類型