ljlm0402 / typescript-express-starter Goto Github PK
View Code? Open in Web Editor NEWπ Quick and Easy TypeScript Express Starter
Home Page: http://npm.im/typescript-express-starter
License: MIT License
π Quick and Easy TypeScript Express Starter
Home Page: http://npm.im/typescript-express-starter
License: MIT License
μλ νμΈμ.
app μμμ enum νμ μ node_env λ₯Ό κ°μ§λ©΄ μΆν νμ©ν μ μ΄ μμκ² κ°μ΅λλ€~
enum NodeEnv {
development = 'development',
production = 'production',
}
Tried to set sequelize during the setup. Later, modified the configs and environments to use postgres
but that doesn't allow me to use my postgresql server :( Am I doing it incorrectly?
Thank you bro, It' help me a lot.
:)
This starter repository is not working anymore because of a recent major release of Sequelize V6. We are getting the following error:
TSError: β¨― Unable to compile TypeScript:
src/models/index.model.ts(25,22): error TS2769: No overload matches this call.
The last overload gave the following error.
Type 'typeof User' is not assignable to type 'string | ModelCtor<Model<any, any>>'.
Type 'typeof User' is not assignable to type 'ModelCtor<Model<any, any>>'.
Type 'typeof User' is not assignable to type 'typeof Model'.
Construct signature return types 'User' and 'Model<T, T2>' are incompatible.
The types of '_attributes' are incompatible between these types.
Type 'User' is not assignable to type 'T'.
'T' could be instantiated with an arbitrary type which could be unrelated to 'User'.
at createTSError (D:\___\code\api\node_modules\ts-node\src\index.ts:434:12)
at reportTSError (D:\___\code\api\node_modules\ts-node\src\index.ts:438:19)
at getOutput (D:\___\code\api\node_modules\ts-node\src\index.ts:578:36)
at Object.compile (D:\___\code\api\node_modules\ts-node\src\index.ts:775:32)
at Module.m._compile (D:\___\code\api\node_modules\ts-node\src\index.ts:858:43)
at Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
at Object.require.extensions.<computed> [as .ts] (D:\___\code\api\node_modules\ts-node\src\index.ts:861:12)
at Module.load (internal/modules/cjs/loader.js:986:32)
at Function.Module._load (internal/modules/cjs/loader.js:879:14)
at Module.require (internal/modules/cjs/loader.js:1026:19)
[nodemon] app crashed - waiting for file changes before starting...
sequelize-typescript
is not yet upgraded to support Sequelize V6.
I think this one is the WIP: sequelize/sequelize-typescript#804
Create a new template knex
kenx : https://knexjs.org/
Creating a new template using knex, SQL Query Builder
To provide a variety of templates
Hey guys I just created a project via npx and I was trying to get in to the swagger in the scratch project and it not working. There is no even a swagger.yaml file.
Using the starter, if you have a service function do something that violates a database constraint (for example on uniqueness or table relationships), the error is uncaught and the API returns a 500. What is a good strategy for catching these errors and returning a 4xx and a better error message?
Even though there exists a validationMiddleware
that calls plainToClass()
and transforms the body object into a class instance, this class instance is not preserved and will need to be transformed again in the route handler.
What currently exists in the project in the controller is a simple cast const userData: CreateUserDto = req.body;
, but that's lying to the compiler because userData
is not actually an instance of CreateUserDto
, this can be noticed if the Dto has methods or custom getters or setters. Is this a real concern? Or should we ignore this?
One replacement could be const userData = plainToClass(CreateUserDto, req.body);
, but I was thinking that maybe we can make use of the validationMiddleware
as it calls plainToClass
already.
What do you think?
.npmignore λ‘ κΉνλΈ ν΄λ μ μ
μ΄λ―Έμ§ νμΌ λ³λ λ ν¬ μ΄μ
typescript ν΄λ μ κ±° λ° ν΅ν©
Is the template following the clean architecture from R.C. Martin?
the template project has a template like
/model ( or entities)
/service
/controller
/routes
pattern: https://github.com/ljlm0402/typescript-express-starter
But I have problems matching it to this architecture which many say is the de facto standard for a good software architecture
Like where do I find the entities, use cases, controllers etc.
For me only the controller layer is easy to find. In the template example project its also in the folder controllers.
In the example project the controllers use services and the services access the database.
If I try to map it to the pictures, use cases are the services and the entities are the models. But the models in the github project contain database specific code (for example typeorm notations).
Getting error at npm start command
Project setup using command npx typescript-express-starter "project name"
npm run start
Following error generated
`npx: installed 61 in 14.582s
Info: === tsc-alias starting ===
Info: 27 files were affected!
internal/modules/cjs/loader.js:638
throw err;
^
Error: Cannot find module './'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Module.require (internal/modules/cjs/loader.js:692:17)
at require (internal/modules/cjs/helpers.js:25:18)
at Object. (D:\Paxcom\kinator-connector\dist\server.js:6:40)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] start: npm run build && cross-env NODE_ENV=production node dist/server.js
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.`
Currently validation middleware only works on req.body. It will be good if have an option to specify what needs to validated.
TypeScript is switching from tslint to eslint, will typescript-express-starter consider to output a project with eslint.
Verification of cookie or header authorization
mongoose template tsc build error
node : v14.8.0(LTS)
npm : v6.14.9
mongoose : ^5.11.8
@types/mongoose : ^5.10.3
npm run start
or 'num run build'If applicable, add a link to a test case (as a zip file or link to a repository we can clone).
A clear and concise description of what you expected to happen.
A clear and concise description of what actually happened.
If applicable, add screenshots to help explain your problem.
Add any other context about the problem here.
When running the unit tests in the default version, the auth.test.ts fails:
` src/tests/auth.test.ts:25:36 - error TS2339: Property 'path' does not exist on type 'AuthRoute'.
25 .post(`${authRoute.path}/signup`)
~~~~
src/tests/auth.test.ts:41:36 - error TS2339: Property 'path' does not exist on type 'AuthRoute'.
41 .post(`${authRoute.path}/login`)
~~~~
src/tests/auth.test.ts:53:36 - error TS2339: Property 'path' does not exist on type 'AuthRoute'.
53 .post(`${authRoute.path}/logout`)`
Even if this compilation error is fixed, the tests still fail:
FAIL src/tests/auth.test.ts (7.321 s)
β Testing Auth βΊ [POST] /login βΊ response should have the Set-Cookie header with the Authorization token
expected "Set-Cookie" header field
at Test._assertHeader (node_modules/supertest/lib/test.js:237:45)
at Test._assertFunction (node_modules/supertest/lib/test.js:283:11)
at Test.assert (node_modules/supertest/lib/test.js:173:18)
at Server.localAssert (node_modules/supertest/lib/test.js:131:12)
β Testing Auth βΊ [POST] /logout βΊ logout Set-Cookie Authorization=; Max-age=0
expected "Set-Cookie" header field
at Test._assertHeader (node_modules/supertest/lib/test.js:237:45)
at Test._assertFunction (node_modules/supertest/lib/test.js:283:11)
at Test.assert (node_modules/supertest/lib/test.js:173:18)
at Server.localAssert (node_modules/supertest/lib/test.js:131:12)
In the sequelize template I get the following:
FAIL src/tests/auth.test.ts
β Test suite failed to run
src/tests/users.test.ts:15:13 - error TS2740: Type 'typeof User' is missing the following properties from type 'User[]': pop, push, concat, join, and 25 more.
15 const findUser: User[] = userModel;
~~~~~~~~
src/tests/users.test.ts:28:40 - error TS2339: Property 'find' does not exist on type 'typeof User'.
28 const findUser: User = userModel.find(user => user.id === userId);
~~~~
src/tests/users.test.ts:28:45 - error TS7006: Parameter 'user' implicitly has an 'any' type.
28 const findUser: User = userModel.find(user => user.id === userId);
~~~~
src/tests/users.test.ts:74:44 - error TS2339: Property 'filter' does not exist on type 'typeof User'.
74 const deleteUser: User[] = userModel.filter(user => user.id !== userId);
~~~~~~
src/tests/users.test.ts:74:51 - error TS7006: Parameter 'user' implicitly has an 'any' type.
74 const deleteUser: User[] = userModel.filter(user => user.id !== userId);
~~~~
FAIL src/tests/users.test.ts
β Test suite failed to run
src/models/index.model.ts:25:22 - error TS2769: No overload matches this call.
The last overload gave the following error.
Type 'typeof User' is not assignable to type 'string | ModelCtor<Model<any, any>>'.
Type 'typeof User' is not assignable to type 'ModelCtor<Model<any, any>>'.
Type 'typeof User' is not assignable to type 'typeof Model'.
Construct signature return types 'User' and 'Model<T, T2>' are incompatible.
The types of '_attributes' are incompatible between these types.
Type 'User' is not assignable to type 'T'.
'T' could be instantiated with an arbitrary type which could be unrelated to 'User'.
25 sequelize.addModels([User]);
~~~~
node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize.d.ts:16:5
16 addModels(arg: Array<ModelCtor | string>): any;
~~~~~~~~~
The last overload is declared here.
FAIL src/tests/index.test.ts
β Test suite failed to run
TypeError: Cannot read property 'getQueryInterface' of undefined
at Function.get queryInterface [as queryInterface] (node_modules/sequelize/lib/model.js:55:27)
at isFunctionMember (node_modules/sequelize-typescript/dist/model/model/model.js:99:25)
at node_modules/sequelize-typescript/dist/model/model/model.js:96:5
at Array.filter (<anonymous>)
at Object.<anonymous> (node_modules/sequelize-typescript/dist/model/model/model.js:95:6)
at Object.<anonymous> (node_modules/sequelize-typescript/dist/model/shared/model-service.js:3:17)
I've not tried the mongoose version, but I'm guessing that will have similiar issues. I'm guessing these are still work in progress.
After creating the project npx typescript-express-starter [project name]
and running npm i
. Running npm start
builds the project, but when node tries to run the built output, it spits out this error.
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /Users/chris/Projects/NodeAPI/node_modules/swagger-jsdoc/index.js
require() of ES modules is not supported.
require() of /Users/chris/Projects/NodeAPI/node_modules/swagger-jsdoc/index.js from /Users/chris/Projects/NodeAPI/build/app.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename index.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from /Users/chris/Projects/NodeAPI/node_modules/swagger-jsdoc/package.json.
This was running on a Mac using Node 14.15.5
I expect the project to build and run successfully even if it can't connect to a database or anything.
The error shown above.
This exact line is from my readme in express-generator-typescript
"Node Js is great for the rapid development of web-projects, but is often neglected because of the lack of type safety. TypeScript solves this issue and (along with its linter file) can even make your code more robust than some other static languages like Java." Plus a huge chunk of other code is identical.
I know express-generator-typescript is an open source project but at least acknowledge your project as a fork/variation of mine you're going to copy me line-by-line.
yarn test or "npm run test" fails connect method of mongoose cannot be mocked.
As a result all of the test cases fail.
npm install -g typescript-express-starter
npx typescript-express-starter nodeExpressTsSample
npm run test
The test cases should pass.
Test cases fail with error:
TypeError: Cannot read property 'then' of undefined
mongoose_1.connect(database_1.dbConnection.url, database_1.dbConnection.options)
.then(() => {
^
logger_1.logger.info('π’ The database is connected.');
If applicable, add screenshots to help explain your problem. -->
since tslint is now deprecated,
this can help if someone has spare time
https://code.visualstudio.com/api/advanced-topics/tslint-eslint-migration
auto increment not applied
when i use npx typescript-express-starter "my project name"
, it is creating all template files but not .gitignore file.
Is this a problem for me only,
hope you rectify it.
Regards, @shiva-sandupatla
Do you consider to support GraphQL template in future?
Adding API documentation support to the boilerplate would be nice
On line 44 of the uth.service.ts file in the sequalize folder I have noticed that you search for a user only by their password. I am not sure what the user being returned is used for (as they are being logged out) but it seems to me that you could return an incorrect user if 2 users were to use the same password. Suggest changing this to search for user by a unique field or email and password combination?
Any environment.
Should return the user you are logged in as.
A different user (with the same password) is returned.
This same technique seems to be used in TypeORM and mongoose as well. If it is an issue then it probably needs changing in all these.
We need a project that just works right after created. That helps to make trying things extremely easy and so attracts more people. That project fits me almost perfectly, no Passport things, creates auth and DB stuff, and so on. But, not including Pug is a minus.
I believe, if we can make these things optional we can put that project as an industry standard that helps people to code Node with TS.
β Please leave this error as an issue
Error: Command failed: npm i -s bcrypt class-transformer class-validator cookie-parser cors cross-env dotenv envalid express helmet hpp jest jsonwebtoken morgan swagger-jsdoc swagger-ui-express ts-jest ts-node typescript mysql2 sequelize sequelize-typescript
at ChildProcess.exithandler (child_process.js:303:12)
at ChildProcess.emit (events.js:315:20)
at maybeClose (internal/child_process.js:1021:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:286:5) {
killed: false,
code: 1,
signal: null,
cmd: 'npm i -s bcrypt class-transformer class-validator cookie-parser cors cross-env dotenv envalid express helmet hpp jest jsonwebtoken morgan swagger-jsdoc swagger-ui-express ts-jest ts-node typescript mysql2 sequelize sequelize-typescript',
stdout: "Failed to execute '/usr/bin/node /usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js configure --fallback-to-build --module=/home/asya/prjcts/adminkoSwaponline/node_modules/bcrypt/lib/binding/napi-v3/bcrypt_lib.node --module_name=bcrypt_lib --module_path=/home/asya/prjcts/adminkoSwaponline/node_modules/bcrypt/lib/binding/napi-v3 --napi_version=6 --node_abi_napi=napi --napi_build_version=3 --node_napi_label=napi-v3' (1)\n",
stderr: ''
}
Create a new template graphql
graphql: https://graphql.org/
Creating a new template using graphql, A query language for your API
To provide a variety of templates
If the skipMissingProperties value of validation middleware is set to true, the corresponding function is not performed at all.
However, it is necessary to determine the req data based on dto, and verification of other req data is required.
For example, it is composed of dto = email, password, but if the data of req.body is added as email, password, name, and name data is added, the corresponding verification must be done even if skipMissingProperties = true.
When I run server with default implementation, I get this:
TSError: β¨― Unable to compile TypeScript:
src/middlewares/validation.middleware.ts:9:33 - error TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Request<ParamsDictionary, any, any, ParsedQs>'.
No index signature with a parameter of type 'string' was found on type 'Request<ParamsDictionary, any, any, ParsedQs>'.
9 validate(plainToClass(type, req[value]), { skipMissingProperties })
How can I fix this?
It's a lot easier and less verbose to configure sequelize models using data annotaions and some utitilities provides by sequelize-typescript.
Reference: https://github.com/RobinBuschmann/sequelize-typescript
default template
node v15.11.0
Info: === tsc-alias starting ===
Info: 11 files were affected!
file:///Users/user/Desktop/Code/butter/dist/server.js:2
Object.defineProperty(exports, "__esModule", { value: true });
^
ReferenceError: exports is not defined
at file:///Users/user/Desktop/Code/butter/dist/server.js:2:23
at ModuleJob.run (node:internal/modules/esm/module_job:154:23)
at async Loader.import (node:internal/modules/esm/loader:166:24)
tsconfig.json
{ "compileOnSave": false, "compilerOptions": { "target": "es2017", "lib": ["es2017", "esnext.asynciterable"], "typeRoots": ["node_modules/@types"], "allowSyntheticDefaultImports": true, "experimentalDecorators": true, "emitDecoratorMetadata": true, "forceConsistentCasingInFileNames": true, "moduleResolution": "node", "module": "commonjs", "pretty": true, "sourceMap": true, "declaration": true, "outDir": "./dist", "skipLibCheck": true, "allowJs": true, "noEmit": false, "esModuleInterop": true, "resolveJsonModule": true, "importHelpers": true, "baseUrl": "src", "paths": { "@app": ["app"], "@controllers/*": ["controllers/*"], "@dtos/*": ["dtos/*"], "@exceptions/*": ["exceptions/*"], "@interfaces/*": ["interfaces/*"], "@middlewares/*": ["middlewares/*"], "@models/*": ["models/*"], "@routes/*": ["routes/*"], "@services/*": ["services/*"], "@utils/*": ["utils/*"] } }, "include": ["src/**/*.ts", "src/**/*.json", ".env"], "exclude": ["node_modules"] }
Is there any specific CLI command to generate all the interfaces for Sequelize Models etc using just a single command in your project? Turns out sequelize migrate creates plain old js files.
The files are creating and after sometime it says as below
Γ Please leave this error as an issue
Error: Command failed: npm i -s bcrypt class-transformer class-validator compression config cookie-parser cors cross-env dotenv envalid express helmet hpp jest jsonwebtoken morgan [email protected] swagger-ui-express ts-jest ts-node typescript winston winston-daily-rotate-file
at ChildProcess.exithandler (child_process.js:308:12)
at ChildProcess.emit (events.js:315:20)
at maybeClose (internal/child_process.js:1048:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:288:5) {
killed: false,
code: 1,
signal: null,
cmd: 'npm i -s bcrypt class-transformer class-validator compression config cookie-parser cors cross-env dotenv envalid express helmet hpp jest jsonwebtoken morgan [email protected] swagger-ui-express ts-jest ts-node typescript winston winston-daily-rotate-file',
stdout: '',
stderr: ''
}
Hi, it will be very helpful if you add compile to js feature in your npm script.
Adding a new function pm2
pm2 : https://pm2.keymetrics.io/
Adding a new function pm2, ADVANCED, PRODUCTION PROCESS MANAGER FOR NODE.JS
Cluster mode, Load balancing, keep applications alive forever
When trying to run the application, an exception is being thrown:
this.app.use(helmet()); ^ TypeError: helmet_1.default is not a function at App.initializeMiddlewares (C:\Source\TnT\TnT2\src\app.ts:39:26) at new App (C:\Source\TnT\TnT2\src\app.ts:20:10) at Object.<anonymous> (C:\Source\TnT\TnT2\src\server.ts:10:13) at Module._compile (internal/modules/cjs/loader.js:1138:30) at Module.m._compile (C:\Source\TnT\TnT2\node_modules\ts-node\src\index.ts:1043:23) at Module._extensions..js (internal/modules/cjs/loader.js:1158:10) at Object.require.extensions.<computed> [as .ts] (C:\Source\TnT\TnT2\node_modules\ts-node\src\index.ts:1046:12) at Module.load (internal/modules/cjs/loader.js:986:32) at Function.Module._load (internal/modules/cjs/loader.js:879:14) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
The fix seems to be changing the import statement in app.ts from:
import helmet from 'helmet';
to
import * as helmet from 'helmet'
I'm happy to submit to resolve this myself, but I'm not sure if this is by design or not.
Anytime you tired to npm start (or run the built server), it would fail with:
internal/modules/cjs/loader.js:818
throw err;
^
Error: Cannot find module './'
Require stack:
Ubuntu 20.04, Node v12.22.1, npm v6.14.12
Its expected to start the server up on port 3000 but fails.
Fails and quits server.
I fixed this by changing line 4 of server.ts from:
import App from '@app';
to:
import App from './app';
Hello, i wanted to know if there is any update on the typeorm tempate
TSLint has been deprecated in favour of ESLint.
https://www.npmjs.com/package/tslint
Thank you for creating this starter project! It's great!
Best.
Tests in mongoose version of the template are failing
When using the sequelize template and running the project with docker compose up -d
I get an error when the node application tries to interact with the database.
Not sure if the templates are suppose to be working examples.
Used with Docker
sequelize
templatehttp://localhost:3000/users
error: [GET] /users >> StatusCode:: 500, Message:: connect ECONNREFUSED 127.0.0.1:3306
ConnectionRefusedError [SequelizeConnectionRefusedError]: connect ECONNREFUSED 127.0.0.1:3306
at ConnectionManager.connect (/app/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:116:17)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at ConnectionManager._connect (/app/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:318:24)
at /app/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:250:32
at ConnectionManager.getConnection (/app/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:280:7)
at /app/node_modules/sequelize/lib/sequelize.js:613:26
at MySQLQueryInterface.select (/app/node_modules/sequelize/lib/dialects/abstract/query-interface.js:953:12)
at Function.findAll (/app/node_modules/sequelize/lib/model.js:1753:21)
at UserService.findAllUser (/app/src/services/users.service.ts:12:29)
at UsersController.getUsers (/app/src/controllers/users.controller.ts:11:40) {
parent: Error: connect ECONNREFUSED 127.0.0.1:3306
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1146:16) {
errno: -111,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 3306,
fatal: true
},
original: Error: connect ECONNREFUSED 127.0.0.1:3306
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1146:16) {
errno: -111,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 3306,
fatal: true
}
}
2021-06-09 19:19:44 error: connect ECONNREFUSED 127.0.0.1:3306
New Feature Makefile
docker build : https://docs.docker.com/engine/reference/commandline/build/
Build an image from a Dockerfile
The only error message received while running the project is :
[nodemon] app crashed - waiting for file changes before starting...
4.3.1
This is a simple replication but not knowing what error occurred and where it occurred is really difficult to debug.
The error messages should show the stack trace not just single line saying app has crashed.
at Object.<anonymous> (/home/user/Documents/projects/node/typescript-express-starter/src/server.ts:12:13)
at Module._compile (internal/modules/cjs/loader.js:1068:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
at Module.load (internal/modules/cjs/loader.js:933:32)
at Function.Module._load (internal/modules/cjs/loader.js:774:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
at internal/main/run_main_module.js:17:47
Only this error message is displayed:
[nodemon] app crashed - waiting for file changes before starting...
node version:14.17.0
operating system: ubuntu 20.04
screen recording:
https://imgur.com/a/jEHKwAH
Hi guys! Great work on this project! Thanks for saving me a lot of headaches!
If there could be some sequelize-cli
integration on this project(to generate migration and etc), or document on how to set it up, it'd be great! Thanks again for your work.
Is there any reason that classes like userService aren't static?
Wouldn't it be easier to call the method without having to initiate an object?
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.