我正在处理一个带有 Node.js、Express.js 和 TypeScript 后端(REST API)和一个 React、Redux 和 TypeScript 前端的项目。
在后端,我创建了一些类型,例如:
模型/产品.ts
export type Product = {
title: string
description: string
price: number
}
Run Code Online (Sandbox Code Playgroud)
因此 REST API 正在发送如下响应:
{
"data": [
{"title": "Shoe", "Description": "This is a shoe.", "price": 20},
{...}
] // inside here all the Products[]
}
Run Code Online (Sandbox Code Playgroud)
在客户端上,我想将data转换为类型Product数组。但是由于前端和后端是不同的代码库并且是分开的,我仍然想利用前端使用类型的优势。但我想在不重复代码的情况下实现这一点。所以我不想在修改或添加模型时更新 2 个地方。
有人知道在客户端和服务器之间共享类型的最佳方式是什么吗?
我正在考虑在后端创建一个客户端可以访问的端点,然后将所有模型写入单个文件中,例如
models.ts在客户端上。所以我想我需要遍历后端 /models/ 中的每个文件,然后将其解析为一个新文件,该文件在客户端上写入为models.ts。但这真的是一个好方法吗?有人知道实现这种结构的更好方法吗?
所以我有这个NodeJS Express应用程序。这是代码的工作原理:
Docker文件
FROM node:10.16-alpine
WORKDIR /app
COPY . /app
RUN npm install
CMD ["npm", "start"]
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
version: "3.7"
services:
node-express:
build: .
ports:
- 80:3000
Run Code Online (Sandbox Code Playgroud)
但是对于这个程序,我想查看实时代码更改。因此,我知道可以在其中使用Bind Mounts,但是一旦我添加了卷,就这样:
docker-compose.yml
version: "3.7"
services:
node-express:
build: .
volumes:
- .:/app
ports:
- 80:3000
Run Code Online (Sandbox Code Playgroud)
看来node_modules不再位于“ app”目录中。如何解决此问题?我已经为此工作了四个小时,但仍然找不到错误!
错误
HijackManiac:webserver hijackmaniac$ docker-compose up
Creating network "webserver_default" with the default driver
Building node-express
Step 1/5 : FROM node:10.16-alpine
---> a298c79121d9
Step 2/5 : WORKDIR /app
---> Running in 9b99df0f54ba
Removing intermediate container 9b99df0f54ba
---> 48f9b606b32d
Step …Run Code Online (Sandbox Code Playgroud) 所以这个问题是我上一个问题的后续: 如何从共享组件文件夹导入不同的应用程序?反应 / 反应原生
所以我创建了我自己的npm 模块,我将所有组件都存储在其中。这些组件可以被任意数量的应用程序使用。因为我将使这些组件高度可重用。
但我仍然偶然发现了一个问题。
我创建了一个使用这个库的加载组件:@react-native-community/masked-view。这个库需要在 /ios/Podfile 中安装一个依赖项。首先,我在一个 react-native 项目中创建了这个组件。
yarn add @react-native-community/masked-view
..
success Saved 1 new dependency.
cd ios/
pod install
..
Installing RNCMaskedView (0.1.6)
Pod installation complete! There are 33 dependencies from the Podfile and 31 total pods installed.
Run Code Online (Sandbox Code Playgroud)
'
然后我运行了我的代码,加载组件工作。现在我想将它添加到包含我所有组件的 NPM 模块(同样是我自己创建的)。
所以我进入 /my-awesome-99-components/ ,它有自己的 package.json 因为它是一个模块,我将在我正在处理的每个项目中导入它。
在 /my-awesome-99-components/
yarn add react react-native @react-native-community/masked-view
..
success Saved 1 new dependency.
// Created Loading.js - this is the loading …Run Code Online (Sandbox Code Playgroud) javascript ×2
client ×1
docker ×1
model ×1
module ×1
node-modules ×1
package ×1
react-native ×1
reactjs ×1
server ×1
typescript ×1