因此,我正在開發一個項目,希望我使用GraphQL來創建我的API。我也在使用NodeJS和Express。通常情況下,我只需在express中設置一個端點,然後使用客戶端的axios調用它。在服務器的端點內部,我可以從req.body中獲取信息,並按照我的需要進行處理。我在哪裏可以使用GraphQL以相同的方式操作數據?感覺就像我所做的只是查詢數據,而不是操縱它,然後像我想要的那樣發回它。我是否錯誤地使用GraphQL?我不知道它是如何將數據發送給我的
這是我有:
架構graphql:
import GraphQLDate from 'graphql-date';
const {
GraphQLObjectType,
GraphQLString,
GraphQLInt,
GraphQLSchema,
GraphQLList,
GraphQLNonNull,
} = require('graphql');
const SecretMessage = new GraphQLObjectType({
name: 'secretMessage',
fields:() => ({
id: { type: GraphQLString },
name: { type: GraphQLString },
message: { type: GraphQLString },
expirDate: { type: GraphQLDate },
}),
});
const RootQuery = new GraphQLObjectType({
name: 'RootQueryType',
fields: {
secretMessage: {
type: SecretMessage,
args: {
name: { type: GraphQLString },
},
resolve(parVal, args) {
return `${args.name}test`;
},
},
},
});
module.exports = new GraphQLSchema({
query: RootQuery,
});
我的節點服務器:
import express from 'express';
import path from 'path';
import bodyParser from 'body-parser';
import webpack from 'webpack';
const config = require('../webpack.config.js');
const expressGraphQL = require('express-graphql');
const schema = require('./schema.js');
const compiler = webpack(config);
const port = process.env.PORT || 3000;
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static('public'));
app.use(express.static('css'));
app.use(express.static('images'));
app.use('/graphql', expressGraphQL({
schema,
graphiql: true,
}));
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, '../public/src', 'index.html'));
});
app.get('#', (req, res) => {
console.log('Pound hashtag works');
});
app.post('passphrase', (req, res) => {
console.log('passphrase tag works');
});
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, '../public/src', 'index.html'));
});
app.listen(port, (error) => {
if (error) {
console.log('This is the express error: ', error);
} else {
console.log('Express is listening on port: ', port);
}
});
axios({
method: 'post',
url: '/graphql',
data: JSON.stringify({
query: `secretMessage(name: "${this.state.name}") {name}`,
}),
}).then((response) => {
console.log('This is the response from the axios call: ', response);
}).catch((error) => {
console.log('This is the error from the main axios call: ', error);
});
當我做了愛可信後調用/ graphql,我只是得到一個400錯誤的請求錯誤。
字符串插值旁邊的'測試'事情是我只是想看看我是否可以操縱那裏的數據。儘管我不知道如何在郵遞員中測試它。有什麼想法嗎?
是的,當前我正在使用express-graphql,並且我有一個運行節點的服務器。編輯時我也會把它寫入問題。 – Milos
看到我的編輯一些額外的建議。確保你正確地格式化你的axios請求。它應該看起來像這樣: axios({'012'''''''''''''POST' url:'yoururlhere', header:{'Content-Type':'application/json'}, data:JSON.stringify({query} ), }) 其中'query'是您的完整查詢字符串。 –
謝謝丹尼爾,你的幫助讓我進一步了。我仍然在axios的帖子上收到不好的要求。我編輯了我的原始文章以包含它。我再次感謝你對此的幫助。 – Milos