In questo tutorial, parleremo di come progettare servizi REST in TypeScript, MongoDB ed Express.
Nel nostro progetto creeremo endpoint che creeranno, recupereranno e aggiorneranno utilizzando i metodi POST, GET e PUT. Per raggiungere questo obiettivo, useremo le funzioni Mongoose come creare () , findOne(),findOneAndUpdate()
Gli endpoint verranno creati in Express.
npm install express @types/express --save-dev.npm install mongoose --save.npm install typescript -g.Digita npm init per inizializzare il progetto. Questo ti chiederà il nome del tuo progetto, l'autore, la versione, il link al repository GIT, la licenza e tutto il resto. Puoi saltarli per ora usando il comando npm init -y .
Una volta completata l'installazione di base, aggiungi alcuni script al file package.json.
"scripts": {
"watch-ts": "tsc -w",
"watch-node": "nodemon dist/server.js",
"watch": "concurrently -k -p \"[{name}]\" -n \"TypeScript, Node\" -c \"yello.bold, cyan.bold\" \"yarn run watch-ts\" \"yarn run watch-node\""
}
{
"name": <Your Project Name>,
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"scripts": {
"watch-ts": "tsc -w",
"watch-node": "nodemon dist/server.js",
"watch": "concurrently -k -p \"[{name}]\" -n \"TypeScript, Node\" -c \"yello.bold, cyan.bold\" \"yarn run watch-ts\" \"yarn run watch-node\""
},
"dependencies": {
"@types/express": "^4.11.1",
"concurrently": "^3.5.1",
"express": "^4.16.3"
}
}
Crea un nuovo tsconfig.jsonfile nella tua directory principale e aggiungi la seguente configurazione:
{
"compilerOptions": {
"module": "commonjs",
"esModuleInterop": false,
"target": "es6",
"noImplicitAny": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"moduleResolution": "node",
"sourceMap": true,
"outDir": "dist",
"baseUrl": ".",
"paths": {
"*": ["node_modules/", "src/types/*"]
}
},
"include": ["src/**/*"]
}
Crea il tuo file app.ts e aggiungi il seguente codice al suo interno.
import * as express from "express";
import {Server, Path, GET, PathParam} from "typescript-rest";
class Sample {
@Path("/hello:name")
@GET
sayHello( @PathParam('name') name: string ): string {
return "Hello " + name;
}}
let app: express.Application = express();
Server.buildServices(app);
app.listen(3000, function() {
console.log('Rest Server listening on port 3000!');
});
Connessione a MongoDB:
Crea un file db.ts e aggiungi il codice seguente. Questo blocco di codice contiene l'indirizzo locale del database.
import * as mongoose from 'mongoose';
export class myDB {
public static async initDB() {
return mongoose.connect('mongodb://localhost:27017/local');
}
public static async closeCon() {
return mongoose.connection.close(true);
}}
import * as express from "express";
import { myDB } from './db';
import {Server, Path, GET, PathParam} from "typescript-rest";
class Sample {
constructor(){
myDB.initDB();
}
let app: express.Application = express();
Server.buildServices(app);
app.listen(3000, function() {
console.log('Rest Server listening on port 3000!');
});
Creiamo una cartella chiamata models. Crea un file userModel all'interno della cartella dei modelli.
import * as mongoose from 'mongoose';
import { Model } from 'mongoose';
type UserType = UserModel & mongoose.Document;
export interface UserModel {
firstname:{
type: String,
required: true
}
lastname:{
type: String,
required: true
}
mobile: {
type: Number
}
age: {
type: Number,
}
pincode: {
type: Number
}
};
const Users = new mongoose.Schema({
firstname:{
type: String,
required: true
},
lastname:{
type: String,
required: true
},
mobile: {
type: Number
},
age: {
type: Number,
},
pincode: {
type: Number
},
});
const Users: Model<UserType> = mongoose.model<UserType>('Users', UserSchema,'Users');
export default Users;
Importiamo questo file nel nostro app.ts principale. Queste importazioni verranno utilizzate in seguito durante la creazione di corpi API, ovvero POST, GET e PUT.
import * as express from "express";
import { myDB } from './db';
import Users, { UserModel } from './models/userModel';
import {Server, Path, GET, PathParam} from "typescript-rest";
class Sample {
constructor(){
myDB.initDB();
}
let app: express.Application = express();
Server.buildServices(app);
app.listen(3000, function() {
console.log('Rest Server listening on port 3000!');
});
Fare richieste POST:
import * as express from "express";
import { myDB } from './db';
import Users, { UserModel } from './models/userModel';
import {Server, Path, POST } from "typescript-rest";
class ExampleClass{
constructor(){
myDB.initDB();
}
@POST
@Path('post/users')
public async createUser(newRecord: UserModel){
try{
var users = await Users.create(newRecord);
return users;
}catch(e){
console.log(e);
}};
let app: express.Application = express();
Server.buildServices(app);
app.listen(3000, function() {
console.log('Rest Server listening on port 3000!');
});
{
“firstname”: “Nishant”,
“lastname”: “Kumar”,
“mobile”: 123456789,
“age”: 24,
“pincode”: 987654
}
Otterrai qualcosa come:
[{
"_id":<Some Random id>
“firstname”: “Nishant”,
“lastname”: “Kumar”,
“mobile”: 123456789,
“age”: 24,
“pincode”: 987654
}]
Allo stesso modo, puoi effettuare richieste GET e PUT.
import * as express from "express";
import { myDB } from './db’;
import Users, { UserModel } from './models/userModel’;
import {Server, Path, POST, GET, PUT, PathParam} from "typescript-rest";
import { ObjectId } from "mongodb";
class ExampleClass{
constructor(){
myDB.initDB();
}
@POST
@Path('post/users')
public async createUser(newRecord: UserModel){
try{
var users = await Users.create(newRecord);
return users;
}catch(e){
console.log(e);
}};
@PUT
@Path('put/users/:id')
public async updateUser(@PathParam('id') id: ObjectId){
try{
var users = await Users.findOneAndUpdate({ _id: id });
return users;
}catch(e){
console.log(e);
}};
@GET
@Path('get/users/:id')
public async getUser(@PathParam('id') id: ObjectId){
try{
var users = await Users.findOne({ _id: id });
return users;
}catch(e){
console.log(e);
}};
let app: express.Application = express();
Server.buildServices(app);
app.listen(3000, function() {
console.log('Rest Server listening on port 3000!');
});
INVIARE: http://localhost:3000/post/users
METTERE: http://localhost:3000/put/users/:id
OTTENERE: http://localhost:3000/get/users/:id
È tutto. Prova e sperimenta. Buon apprendimento.
A volte potrebbe essere necessario sapere dove viene eseguita la tua app Web e che tipo di dispositivo viene utilizzato per questo. È un pc? è un dispositivo mobile? e anche, se si tratta di un dispositivo mobile, quale sistema operativo viene utilizzato per questo in modo da poter regolare le visualizzazioni e rendere la tua app più reattiva o eliminare alcune funzionalità che non funzioneranno su questo dispositivo o sull'altro.
A volte, tendiamo spesso a passare funzioni asincrone con funzioni forEach e map. Ad esempio: Risultato: tutti i numeri da 1.
Era mezzanotte passata quando Hayden riportò Katie al dormitorio del college dopo la loro serata insieme. Aveva una lezione la mattina presto e non aveva un altro cambio di vestiti dopo essere stata con lui la sera prima.
Introduzione:Benvenuti, coraggiosi lettori, in un viaggio che ci porterà nelle profondità più oscure del nostro pianeta. In questo blog, ci addentriamo nel mondo enigmatico della Fossa delle Marianne, scoprendo i suoi segreti nascosti e scoprendo le verità agghiaccianti che giacciono sotto la sua superficie.
Quante volte vi è capitato di buttare via una bottiglia di plastica, un barattolo di vetro, una lattina di alluminio o una confezione di energia green senza pensarci due volte? Quante volte hai desiderato di poter ottenere qualcosa in cambio del loro riciclaggio? Se sei come la maggior parte delle persone, la risposta è probabilmente molte volte. Il riciclaggio è spesso visto come una seccatura, un lavoro di routine o un dovere che non porta alcun beneficio immediato o tangibile.
La scorsa settimana ho notato un comunicato stampa, inviato tramite PressGazette (un sito Web di notizie sui media britannici). L'articolo annunciava che Acast, la società di hosting e pubblicità di podcast di Scandi, avrebbe guidato un consorzio di editori "probabilmente i più influenti" nel podcasting.