本项目是使用egg-graphql插件构建的graphql服务器
git clone
npm install
npm run dev
本项目是使用egg-graphql插件构建的graphql服务器
git clone
npm install
npm run dev
如何在.graphql中设置description,使得graphiql中可以像github api explore一样显示描述文本
C:\GraphQL\egg-graphql-boilerplate>npm run dev
> [email protected] dev C:\GraphQL\egg-graphql-boilerplate
> egg-bin dev
2018-12-13 16:42:05,585 INFO 8300 [master] node version v10.14.0
2018-12-13 16:42:05,590 INFO 8300 [master] egg version 1.17.0
sequelize deprecated String based operators are now deprecated. Please use Symbol based operators for better security, read more at http://docs.sequelizejs.com/manual/tutorial/querying.html#operators node_modules\[email protected]@sequelize\lib\sequelize.js:242:13
2018-12-13 16:42:16,817 ERROR 4432 nodejs.SequelizeConnectionError: Unknown database 'graphql'
at Utils.Promise.tap.then.catch.err (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@sequelize\lib\dialects\mysql\connection-manager.js:149:19)
at tryCatcher (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\promise.js:512:31)
at Promise._settlePromise (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\promise.js:569:18)
at Promise._settlePromise0 (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\promise.js:614:10)
at Promise._settlePromises (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\promise.js:690:18)
at _drainQueueStep (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\async.js:138:12)
at _drainQueue (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\async.js:131:9)
at Async._drainQueues (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\async.js:147:5)
at Immediate.Async.drainQueues [as _onImmediate] (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\async.js:17:14)
From previous event:
at Promise.longStackTracesCaptureStackTrace [as _captureStackTrace] (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\debuggability.js:411:19)
at Function.Promise.attempt.Promise.try (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\method.js:29:9)
at Promise.resolve.retryParameters (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@sequelize\lib\sequelize.js:454:64)
at C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@retry-as-promised\index.js:39:21
at Promise._execute (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\debuggability.js:313:9)
at Promise._resolveFromExecutor (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\promise.js:483:18)
at new Promise (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\promise.js:79:10)
at retryAsPromised (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@retry-as-promised\index.js:29:10)
at Sequelize.query (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@sequelize\lib\sequelize.js:454:28)
at Sequelize.authenticate (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@sequelize\lib\sequelize.js:783:17)
at authenticate (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@egg-sequelize\lib\loader.js:59:21)
at authenticate.next (<anonymous>)
at onFulfilled (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:65:19)
at C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:54:5
at new Promise (<anonymous>)
at co (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:50:10)
at toPromise (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:118:63)
at next (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:99:29)
at onFulfilled (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:69:7)
at C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:54:5
at new Promise (<anonymous>)
at co (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:50:10)
at toPromise (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:118:63)
at next (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:99:29)
at onFulfilled (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:69:7)
at C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:54:5
at new Promise (<anonymous>)
at co (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:50:10)
name: "SequelizeConnectionError"
parent: {"code":"ER_BAD_DB_ERROR","errno":1049,"sqlState":"#42000"}
original: {"code":"ER_BAD_DB_ERROR","errno":1049,"sqlState":"#42000"}
pid: 4432
hostname: graphql
2018-12-13 16:42:16,830 ERROR 4432 nodejs.SequelizeConnectionError: Unknown database 'graphql'
at Utils.Promise.tap.then.catch.err (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@sequelize\lib\dialects\mysql\connection-manager.js:149:19)
at tryCatcher (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\promise.js:512:31)
at Promise._settlePromise (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\promise.js:569:18)
at Promise._settlePromise0 (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\promise.js:614:10)
at Promise._settlePromises (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\promise.js:690:18)
at _drainQueueStep (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\async.js:138:12)
at _drainQueue (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\async.js:131:9)
at Async._drainQueues (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\async.js:147:5)
at Immediate.Async.drainQueues [as _onImmediate] (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\async.js:17:14)
From previous event:
at Promise.longStackTracesCaptureStackTrace [as _captureStackTrace] (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\debuggability.js:411:19)
at Function.Promise.attempt.Promise.try (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\method.js:29:9)
at Promise.resolve.retryParameters (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@sequelize\lib\sequelize.js:454:64)
at C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@retry-as-promised\index.js:39:21
at Promise._execute (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\debuggability.js:313:9)
at Promise._resolveFromExecutor (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\promise.js:483:18)
at new Promise (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@bluebird\js\release\promise.js:79:10)
at retryAsPromised (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@retry-as-promised\index.js:29:10)
at Sequelize.query (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@sequelize\lib\sequelize.js:454:28)
at Sequelize.authenticate (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@sequelize\lib\sequelize.js:783:17)
at authenticate (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@egg-sequelize\lib\loader.js:59:21)
at authenticate.next (<anonymous>)
at onFulfilled (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:65:19)
at C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:54:5
at new Promise (<anonymous>)
at co (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:50:10)
at toPromise (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:118:63)
at next (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:99:29)
at onFulfilled (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:69:7)
at C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:54:5
at new Promise (<anonymous>)
at co (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:50:10)
at toPromise (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:118:63)
at next (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:99:29)
at onFulfilled (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:69:7)
at C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:54:5
at new Promise (<anonymous>)
at co (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@co\index.js:50:10)
name: "SequelizeConnectionError"
parent: {"code":"ER_BAD_DB_ERROR","errno":1049,"sqlState":"#42000"}
original: {"code":"ER_BAD_DB_ERROR","errno":1049,"sqlState":"#42000"}
pid: 4432
hostname: graphql
2018-12-13 16:42:16,831 ERROR 4432 [agent_worker] start error, exiting with code:1
2018-12-13 16:42:16,839 ERROR 8300 nodejs.AgentWorkerDiedError: [master] agent_worker#1:4432 died (code: 1, signal: null)
at Master.onAgentExit (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@egg-cluster\lib\master.js:328:17)
at Master.emit (events.js:182:13)
at Messenger.sendToMaster (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@egg-cluster\lib\utils\messenger.js:137:17)
at Messenger.send (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@egg-cluster\lib\utils\messenger.js:102:12)
at ChildProcess.agentWorker.once (C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@egg-cluster\lib\master.js:219:22)
at Object.onceWrapper (events.js:273:13)
at ChildProcess.emit (events.js:182:13)
at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)
name: "AgentWorkerDiedError"
pid: 8300
hostname: graphql
2018-12-13 16:42:16,842 ERROR 8300 [master] agent_worker#1:4432 start fail, exiting with code:1
2018-12-13 16:42:16,842 ERROR 8300 [master] exit with code:1
⚠️ Error: C:\GraphQL\egg-graphql-boilerplate\node_modules\[email protected]@egg-bin\lib\start-cluster {"baseDir":"C:\\GraphQL\\egg-graphql-boil
erplate","workers":1,"framework":"C:\\GraphQL\\egg-graphql-boilerplate\\node_modules\\egg"} exit with code 1
⚠️ Command Error, enable `DEBUG=common-bin` for detail
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] dev: `egg-bin dev`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] dev script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\graphql\AppData\Roaming\npm-cache\_logs\2018-12-13T08_42_16_923Z-debug.log
C:\GraphQL\egg-graphql-boilerplate>
-----------------------------------------------------------------------------------------------------------
以下为log:
0 info it worked if it ends with ok
1 verbose cli [ 'C:\\Program Files\\nodejs\\node.exe',
1 verbose cli 'C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js',
1 verbose cli 'run',
1 verbose cli 'dev' ]
2 info using [email protected]
3 info using [email protected]
4 verbose run-script [ 'predev', 'dev', 'postdev' ]
5 info lifecycle [email protected]~predev: [email protected]
6 info lifecycle [email protected]~dev: [email protected]
7 verbose lifecycle [email protected]~dev: unsafe-perm in lifecycle true
8 verbose lifecycle [email protected]~dev: PATH: C:\Program Files\nodejs\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin;C:\GraphQL\egg-graphql-boilerplate\node_modules\.bin;C:\Python27\;C:\Python27\Scripts;C:\ProgramData\Boxstarter;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Microsoft SQL Server\110\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\;C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\;C:\Program Files (x86)\Microsoft VS Code\bin;C:\Program Files\Lenovo\Fingerprint Manager Pro\;C:\Program Files\nodejs\;C:\ProgramData\chocolatey\bin;C:\mysql-8.0.13-winx64\bin;;C:\Program Files (x86)\Microsoft VS Code\bin;C:\Users\graphql\AppData\Roaming\npm
9 verbose lifecycle [email protected]~dev: CWD: C:\GraphQL\egg-graphql-boilerplate
10 silly lifecycle [email protected]~dev: Args: [ '/d /s /c', 'egg-bin dev' ]
11 silly lifecycle [email protected]~dev: Returned: code: 1 signal: null
12 info lifecycle [email protected]~dev: Failed to exec dev script
13 verbose stack Error: [email protected] dev: `egg-bin dev`
13 verbose stack Exit status 1
13 verbose stack at EventEmitter.<anonymous> (C:\Program Files\nodejs\node_modules\npm\node_modules\npm-lifecycle\index.js:301:16)
13 verbose stack at EventEmitter.emit (events.js:182:13)
13 verbose stack at ChildProcess.<anonymous> (C:\Program Files\nodejs\node_modules\npm\node_modules\npm-lifecycle\lib\spawn.js:55:14)
13 verbose stack at ChildProcess.emit (events.js:182:13)
13 verbose stack at maybeClose (internal/child_process.js:962:16)
13 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:251:5)
14 verbose pkgid [email protected]
15 verbose cwd C:\GraphQL\egg-graphql-boilerplate
16 verbose Windows_NT 6.1.7601
17 verbose argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "run" "dev"
18 verbose node v10.14.0
19 verbose npm v6.4.1
20 error code ELIFECYCLE
21 error errno 1
22 error [email protected] dev: `egg-bin dev`
22 error Exit status 1
23 error Failed at the [email protected] dev script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 1, true ]
TypeError: DataLoader must be constructed with a function which accepts Array and returns Promise<Array>, but the function did not return a Promise of an Array of the same length as the Array of keys.
为什么还提供了restful 的接口?
在route 中
module.exports = (app) => {
app.get('/', 'home.index');
app.post('/api/auth/login', 'auth.login');
app.post('/api/auth/register', 'auth.register');
app.resources('users', '/api/users', app.controller.user);
};
boilerplate
能写个分页的案例?
在分页那里卡住了
网上绝大部分 graphql
文档都是针对前端入门的。该模板看起来也没法继续深入。
模板提供的例子里面 dataloader
只针对 user
做了优化。
复杂的场景下,如果 item
有100条,那么就会执行至少100个 item
的查询。这看起来很不合理。如果 gql 更复杂点,那么就更无法接受了。
希望有个经典 用户 <=> 角色 <=> 权限
多对多关系的最佳实践。
我用的版本如下:
"dependencies": {
"dataloader": "^1.4.0",
"egg": "^2.2.1",
"egg-graphql": "^2.1.0",
"egg-scripts": "^2.5.0",
"egg-sequelize": "^3.1.2",
"graphql": "^0.13.2",
"lodash": "^4.17.5",
"mysql2": "^1.5.3",
"npm": "^5.8.0"
},
,在执行这里的时候:
const data = yield ctx.service.graphql.query(query);
assert.equal(data.data.user.id, user.id);
assert.equal(data.data.user.name, user.name);
SequelizeAccessDeniedError: Accès refusé pour l'utilisateur: 'root'@'@localhost' (mot de passe: OUI)
照着model创建了本地库和表,没改别的东西,然后就是起不来,报这个错。
用户密码没问题,其他项目访问别的库都是可以得
mutation createItem { createItem(userID: "12323", content: "dasdasd", expire:scalar.Date()) { id } }
Can you provide database files?
enum Priority {
HIGH,
NORMAL,
LOW
}
type Item {
id: ID!
content: String!
expire: String
priority: Priority!
done: Boolean!
tags: [String!]
updated_at: Date
created_at: Date
}
mutation CreateUser($user: CreateUserInput!) { createUser(input: $user) { changedUser { id username } } }
类似这种 我在mutation 文件夹下定义 了
createCaughtError($caughtError:CreateCaughtErrorInput!){
createCaughtError(input:$caughtError):User
}
第一个$就提示语法错误了。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.