#node.js #express #heroku #web-deployment #rest
Вопрос:
У меня есть сервер node/typescript, который работает как шарм в локальной разработке. Я развернул его в heroku через интерфейс командной строки. Все выглядит хорошо, релиз подтвержден, ошибок нет.
К сожалению, все маршруты, по которым я звоню с почтальоном или базовым клиентом js, возвращают 404. Я перепробовал все, что мог, но ничего не работает.
Вот сценарии package.json:
"scripts": {
"postinstall": "rimraf ./build amp;amp; tsc",
"deploy": "git push -f heroku master",
"dev": "nodemon",
"start": "node build/index.js",
"tsc": "tsc --noEmit"
},
"engines": {
"node": "15.11.0",
"yarn": "1.16.0"
}
}
Файл процесса:
web: yarn start
// I have also tried: web: node build/index.js
Файл index.ts:
require("dotenv").config();
import express from "express";
import bodyParser from "body-parser";
import cors from "cors";
import { createServer } from "http";
import { Server } from "socket.io";
import connectToDatabase from "./database/connection";
import authRouter from "./routers/auth";
import userRouter from "./routers/user";
// Server
export const app = express();
const server = createServer(app);
// Middleware
app.use(cors({ credentials: true, origin: [process.env.CLIENT as string] }));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
// Routers
app.use(authRouter);
app.use(userRouter);
// Start
connectToDatabase()
.then(() =>
server.listen(process.env.PORT, () => {
console.log(`server is listening on ${process.env.PORT}!`);
})
)
.catch((err) => console.log("error", err));
Вот также файл tsconfig:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"lib": ["es6"],
"allowJs": true,
"outDir": "build",
"rootDir": "src",
"strict": false,
"noImplicitAny": false,
"skipLibCheck": true,
"esModuleInterop": true,
"resolveJsonModule": true,
"baseUrl": "./",
},
"exclude": ["node_modules", "build", "seeds"]
}
Any route throws a 404 when I test it with Postman or go on the server url in my browser. I can’t reach anything with the url «https://my-app.herokuapp.com/blabla». With axios in a React app, I receive a network error. What is wrong with my deployment?