#javascript #graphql #apollo-server #string-literals #template-literals
#javascript #graphql #apollo-сервер #строковые литералы #литералы шаблона
Вопрос:
Я пытаюсь использовать директиву graphql-constraint-directive с сервером apollo graphql. Мне нужно поставить reg. выражение в литерале шаблона, подобное этому
const typeDefs = gql`
input ClaimInput {
id: String!
date: String!
phone: String @constraint(pattern: "^05d([-]{0,1})d{7}$")
email: String
invoice: String
doctorId: String
therapy: [TherapyInput]
files: [FileInput]
}
`
У меня это не сработало. Нет совпадения. Регулярное выражение правильное. Пример работает с этим @constraint(шаблон: «^[0-9a-zA-Z] $») *.
Итак, я понял, что что-то не так с ^05 d([-]{0,1}) d{7} $ в моем литерале typeDefs шаблона.
Я проверил в Node REPL:
> v = `^05d([-]{0,1})d{7}$`
'^05d([-]{0,1})d{7}$'
> v = `^05\d([-]{0,1})d{7}$`
'^05\d([-]{0,1})d{7}$'
Когда я ставлю d игнорируется.
Когда я ставлю \d, у меня есть \d . Не то, что мне нужно.
Как справиться с этой ситуацией?
Редактирование: я думаю, что проблема в gql с «apollo-server»
Когда я изменил на:
const typeDefs = gql`
input ClaimInput {
id: String!
date: String!
phone: String @constraint(pattern: "^05\d([-]{0,1})\d{7}$")
email: String
invoice: String
doctorId: String
therapy: [TherapyInput]
files: [FileInput]
}
`
У меня ошибка:
Ошибка GraphQLError: Синтаксическая ошибка: недопустимая escape-последовательность символов: d .
Когда я изменил на
const typeDefsRaw = String.raw`
input ClaimInput {
id: String!
date: String!
phone: String @constraint(pattern: "^05d([-]{0,1})d{7}$")
email: String
invoice: String
doctorId: String
therapy: [TherapyInput]
files: [FileInput]
}
`
const typeDefs = gql`${typeDefsRaw}`;
У меня та же ошибка:
Ошибка GraphQLError: Синтаксическая ошибка: недопустимая escape-последовательность символов: d .
Комментарии:
1. В любом случае, я отправил новую проблему в репозиторий apollo-serve. github.com/apollographql/apollo-server/issues/4727 . Если есть какие-либо обновления, я сообщаю всем
2. почему бы не использовать graphql-constraint-directive ? как это связано с apollo-сервером? почему apollo-server должен исправить некоторые проблемы с расширением?
3. Ошибка @xadm GraphQLError: Синтаксическая ошибка: недопустимая escape-последовательность символов: d. Проблема в gql
4. тогда это должно быть github.com/apollographql/graphql-tag ?
5. ‘// Имена должны совпадать /^[_a-zA-Z][_a-zA-Z0-9]*$/ согласно graphql-js’ >> github.com/confuser/graphql-constraint-directive/blob/master /… … тогда любой экранирование не поддерживается… вы должны ограничить его на уровне распознавателя
Ответ №1:
Вы можете использовать String.raw
:
v = String.raw`^05d([-]{0,1})d{7}$`
\d
также правильно, если вы не используете / не можете использовать String.raw
. Он отображается только как \d
, поскольку предварительный просмотр в REPL должен быть копируемой строкой. Если console.log(v)
вы увидите только одну обратную косую черту.
Комментарии:
1. Спасибо за быстрый ответ. Я собираюсь проверить это сейчас.
2. Вы правильно ответили. Спасибо. Однако это не решает мою проблему.
Ответ №2:
d
означает цифру, поэтому обходным путем было бы использовать [0-9]
вместо d
.