Introduction
This project is a fork of the parse-server-example, completely restructured to be used natively with TypeScript in NodeJS, instead of JavaScript. The main changes involve the configuration and usage of TypeScript for a more robust and typed development environment.
The project follows a modular structure, optimized for TypeScript:
/src
│── /server
│ ├── app.ts # Main application file to start the Express.js server
│ ├── parse.config.ts # Configuration file for Parse, mainly derived from .env
│ ├── express.utility.ts # Utility functions for Express.js
│
│── /cloud
│ ├── main.ts # Main file for Cloud Code
│ ├── /models # TypeScript models for Parse classes (User, Installation, etc.)
│ ├── /modules # Custom functionalities (functions, triggers, jobs, etc.)
│ ├── /utils # Support classes (e.g., job-scheduler.ts for cron jobs)
│
│── /shared # Shared files between server and Cloud Code (e.g., constants, logger)
│── /types # TypeScript definitions for Parse Server
│
.env # environment variables to configure Parse Server
Dockerfile # Build file for the Parse Server
docker-compose.yml # Docker compose stack configuration for MongoDB + Parse
tsconfig.json # TypeScript configuration file
package.json # Dependencies and build scripts
- Make sure you have a compatible Node.js version installed. Run
node --versionto see your local Node.js version. Open thepackage.jsonfile too see which version of Node.js this example repository requires at{ engines": { "node": "<NODE_VERSION>" } }. Note that there may be other Parse Server version available that support older or newer Node.js versions, see the Parse Server compatibility table. - Clone this repository and change directory to it.
- Run
npm install. - Install a MongoDB database locally from https://docs.mongodb.org/master/tutorial/install-mongodb-on-os-x.
- Run
mongoto connect to your database, just to make sure it's working. Once you see a mongo prompt, exit withControl-D. - Launch Parse Server with
npm start. - By default the API route will use
/parseas a base. You can change this by setting the environment variablePARSE_MOUNT, for example in the CLI run runexport PARSE_MOUNT=/appto set the path toapp. - Your Parse Server is not running and is connected to your local database named
parsein which the data is stored that you manage via Parse Server.
These scripts can help you to develop your app for Parse Server:
npm startwill start your Parse Server.npm run watchwill start your Parse Server and restart if you make any changes.npm run lintwill check the linting of your code, as defined ineslint.config.ts.npm run lint-fixwill attempt fix the linting of your code.npm run prettierwill help improve the formatting and layout of your code, as defined in.prettierrc.npm run testwill run any tests that are written in/spec.npm run coveragewill run tests and check coverage. Output is available in the/coveragefolder.
The project includes a docker-compose.yml file that simplifies remote deployment of the server. You can deploy your Parse Server using Docker with the following command:
docker-compose up -dThis command will start the Parse server in a Docker container, ready for production use.
You can use the /health endpoint to verify that Parse Server is up and running. For example, for local deployment, enter this URL in your browser:
If you deployed Parse Server remotely, change the URL accordingly.
Use the REST API, GraphQL API or any of the Parse SDKs to see Parse Server in action. Parse Server comes with a variety of SDKs to cover most common ecosystems and languages, such as JavaScript, Swift, ObjectiveC and Android just to name a few.
The following shows example requests when interacting with a local deployment of Parse Server. If you deployed Parse Server remotely, change the URL accordingly.
Save object:
curl -X POST \
-H "X-Parse-Application-Id: YOUR_APP_ID" \
-H "Content-Type: application/json" \
-d '{"score":1337}' \
http://localhost:1337/parse/classes/GameScoreCall Cloud Code function:
curl -X POST \
-H "X-Parse-Application-Id: YOUR_APP_ID" \
-H "Content-Type: application/json" \
-d "{}" \
http://localhost:1337/parse/functions/hello// Initialize SDK
Parse.initialize("YOUR_APP_ID", "unused");
Parse.serverURL = 'http://localhost:1337/parse';
// Save object
const obj = new Parse.Object('GameScore');
obj.set('score',1337);
await obj.save();
// Query object
const query = new Parse.Query('GameScore');
const objAgain = await query.get(obj.id);// Initialize SDK in the application class
Parse.initialize(new Parse.Configuration.Builder(getApplicationContext())
.applicationId("YOUR_APP_ID")
.server("http://localhost:1337/parse/") // '/' important after 'parse'
.build());
// Save object
ParseObject obj = new ParseObject("TestObject");
obj.put("foo", "bar");
obj.saveInBackground();// Initialize SDK in AppDelegate
Parse.initializeWithConfiguration(ParseClientConfiguration(block: {
(configuration: ParseMutableClientConfiguration) -> Void in
configuration.server = "http://localhost:1337/parse/" // '/' important after 'parse'
configuration.applicationId = "YOUR_APP_ID"
}))You can change the server URL in all of the open-source SDKs, but we're releasing new builds which provide initialization time configuration of this property.