【Angualr】Express和Angular的协作

我想和API君变得好朋友…

我简单总结了Express和Angular的开发环境搭建流程。我们要在父文件夹下创建一个命名为server的文件夹和一个名为angular的web-app文件夹。

服务器

mkdir server
cd server
npm init
npm install express
npm install -D @types/express

为了能够在保存时快速确认,我们将引入ts-node-dev。保存更改后,只需重新加载即可反映出来。

npm install typescript
npm install -D ts-node-dev

在package.json的scripts中添加dev。

  "scripts": {
    "dev": "ts-node-dev --respawn src/index.ts",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

我会创建tsconfig.json。

tsc --init

如果出现“tsc: command not found”的错误提示,请使用命令“npm i -g typescript”执行一次,然后再创建index.ts。

mkdir src
touch src/index.ts

源目录/索引.ts

import Express from "express";

const app = Express();
const port = 3000;

app.get('/',(req,res)=>{
    res.send('こんにちは');
});

app.listen(port,()=>{
    console.log(`Express app listening at http://localhost:${port}/`)
});

执行

npm run dev
スクリーンショット 2021-03-14 14.13.47.png

我們將與Angular項目進行整合,
在父文件夾的根目錄下。

 ng new web-app
 cd web-app
 touch proxy.conf.json

proxy设置.json

{
    "/api":{
        "target":"http://localhost:3000"
    }
}

angular.json 可以进行重构。

        "serve": {
          "builder": "@angular-devkit/build-angular:dev-server",
          "options": {
            "browserTarget": "web-app:build",
            "proxyConfig": "proxy.conf.json" //追加
          },

服务器/源码/索引.ts

我将在服务器端开发API。

app.get('/api',(req,res)=>{
    res.header('Content-Type', 'application/json; charset=utf-8');
    res.json({message:"こんにちは"});
});

app.module.ts的中文本地化翻译: 应用模块.ts

在app.module.ts中加载HttpClientModule。

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { HttpClientModule } from '@angular/common/http';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    HttpClientModule // 追加
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

我会创建一个API服务。

ng g service service/api

服务/ api.service.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable({
  providedIn: 'root'
})
export class ApiService {

  constructor(private http:HttpClient) { }

  get hello$(){
    return this.http.get<Hello>('api/');
  }
}

export interface Hello{
  message:string;
}

应用组件.ts

我向服务器发送一个GET请求。

import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import { ApiService, Hello } from './service/api.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
  title = 'web-app';
  hello:Observable<Hello>;


  constructor(private api:ApiService){}

  ngOnInit(){
    this.hello = this.api.hello$;
  }
}

app组件的HTML文件。

<p *ngIf="hello|async as h">{{h.message}}</p>

执行 (shí

ng serve --open

当访问localhost:4200时,我们可以在Angular的Web应用程序上看到服务器发送的消息。
请注意,在运行npm run dev时,还需要同时运行服务器端。

广告
将在 10 秒后关闭
bannerAds