#javascript #mongodb #mongoose #graphql #netlify
#javascript #mongodb #мангуст #graphql #netlify
Вопрос:
Как следует из названия, моя мутация addEatery
не сохраняется в моей базе данных. В моих решателях запрос работает отлично, но мутация по какой-то причине этого не делает. Имейте в виду, я все еще новичок в GraphQL.
const Eatery = require("./server/models/Eatery");
module.exports = db => ({
Query: {
eateries: async () =>
await db
.collection("eateries")
.find()
.toArray()
},
Mutation: {
addEatery: async (_, {id, name, description, address, city, postCode, phoneNumber, businessHours, foodType, veganFriendly, vegetarianFriendly, halal, kosher, dogFriendly, childFriendly, ethical, alcohol, price, website }) => {
const eatery = new Eatery({id, name, description, address, city, postCode, phoneNumber, businessHours, foodType, veganFriendly, vegetarianFriendly, halal, kosher, dogFriendly, childFriendly, ethical, alcohol, price, website});
eatery.save();
return eatery;
},
}
});
Теперь он возвращает объект новых данных, с которыми я мутировал на игровой площадке GQL, но когда я проверяю базу данных, она там не обновилась.
По какой-то причине этот код не устраивает, когда я использую await
. Это просто дает мне 500
ответ от сервера: (
Mutation: {
addEatery: async (_, {id, name, description, address, city, postCode, phoneNumber, businessHours, foodType, veganFriendly, vegetarianFriendly, halal, kosher, dogFriendly, childFriendly, ethical, alcohol, price, website }) => {
const eatery = new Eatery({id, name, description, address, city, postCode, phoneNumber, businessHours, foodType, veganFriendly, vegetarianFriendly, halal, kosher, dogFriendly, childFriendly, ethical, alcohol, price, website});
await eatery.save();
return eatery;
},
}
Я использую лямбда-функции Netlify для размещения этого.
Мой индексный файл для моей конечной точки ниже:-
const { ApolloServer } = require("apollo-server-lambda");
const typeDefs = require("./typedefs");
const resolvers = require("./resolvers");
const connectToMongoDB = require("./db");
exports.handler = async function(event, context) {
const db = await connectToMongoDB();
const server = new ApolloServer({
typeDefs,
resolvers: resolvers(db)
});
return new Promise((yay, nay) => {
const cb = (err, args) => (err ? nay(err) : yay(args));
server.createHandler()(event, context, cb);
});
};
Мой файл DB
const MongoClient = require("mongodb").MongoClient;
const URI = process.env.DB_URI;
const DB_NAME = process.env.DB_NAME;
let cachedDb = null;
module.exports = () => {
if (cachedDb amp;amp; cachedDb.serverConfig.isConnected()) {
return Promise.resolve(cachedDb);
}
return MongoClient.connect(URI, { useNewUrlParser: true }).then(client => {
cachedDb = client.db(DB_NAME);
return cachedDb;
});
};
Это typeDefs
const { gql } = require("apollo-server-lambda");
module.exports = gql`
type Eatery {
id: String!
name: String!
description: String
businessHours: String
address: String!
city: String!
postCode: String!
phoneNumber: String
foodType: String!
veganFriendly: Boolean
vegetarianFriendly: Boolean
halal: Boolean
kosher: Boolean
dogFriendly: Boolean
childFriendly: Boolean
ethical: Boolean
website: String
alcohol: Boolean
price: String
}
type Query {
eatery(id: String!): Eatery
eateries: [Eatery]
getFoodType(foodType: String): [Eatery]
}
type Mutation {
addEatery(id: String, name: String!, description: String!, businessHours: String, address: String!, city: String!, postCode: String!, phoneNumber: String, foodType: String!, veganFriendly: Boolean, vegetarianFriendly: Boolean, halal: Boolean, kosher: Boolean, dogFriendly: Boolean, childFriendly: Boolean, ethical: Boolean, alcohol: Boolean, price: String, website: String): Eatery
editEatery(id: String, name: String, description: String, businessHours: String, address: String, city: String!, postCode: String!, phoneNumber: String, foodType: String, veganFriendly: Boolean, vegetarianFriendly: Boolean, halal: Boolean, kosher: Boolean, dogFriendly: Boolean, childFriendly: Boolean, ethical: Boolean, alcohol: Boolean, price: String, website: String): Eatery
deleteEatery(id: String, name: String, description: String, businessHours: String, address: String, city: String!, postCode: String!, phoneNumber: String, foodType: String, veganFriendly: Boolean, vegetarianFriendly: Boolean, halal: Boolean, kosher: Boolean, dogFriendly: Boolean, childFriendly: Boolean, ethical: Boolean, alcohol: Boolean, price: String, website: String): Eatery
}
`;
Любая идея относительно того, почему эта мутация на самом деле не сохраняет эти данные в моем MongoDB, была бы высоко оценена!
Комментарии:
1. Да, вы должны
await
сохранить. » Это просто возвращает мне 500 ответов с сервера : ( » — тогда где-то в журналах вашего сервера должна быть причина исключения.2. Хорошая идея, к сожалению, у mlab нет никаких журналов сервера, к моему ужасу: (