Ниже приведен мой код для простого экспресс-сервера, написанный на машинописном тексте.
import express from 'express';
import bodyParser from 'body-parser';
import path from 'path';
import fs from 'fs';
import { DISTDIR } from './shared/constants';
import LoginController from './controllers/login';
// import * as test from '../../helpers/util';
function name() {
return {
name: 'Amaan'
};
}
class App {
public express: express.Application;
constructor() {
this.express = express();
this.middleware();
this.routes();
}
private middleware(): void {
this.express.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', '*');
next();
});
this.express.use(bodyParser.json());
this.express.use(bodyParser.urlencoded({ extended: false }));
}
private routes(): void {
this.express.get('/', function(req, res) {
res.sendFile(path.join(projectDir, 'dist', 'index.html'));
});
}
}
export default new App().express;
Как вы можете видеть здесь, я отправляю обратно index.html
, который содержит мой код React.
this.express.get('/', function(req, res) {
res.sendFile(path.join(projectDir, 'dist', 'index.html'));
});
Теперь я столкнулся с проблемой, когда мне нужно отправитьответ от любого API в этом запросе также.Примерно так:
function name() {
return {
name: 'Amaan'
};
}
private routes(): void {
this.express.get('/', function(_, res) {
res.setHeader('Content-type', 'text/html');
fs.readFile(path.resolve(DISTDIR, 'index.html'), null, (err, data) => {
if (err) {
res.writeHead(404);
res.write('Not found');
} else {
res.write(data);
}
res.setHeader('Content-type', 'text/json');
res.send(name());
res.end();
});
});
Это дает мне ошибку 'Can\'t set headers after they are sent.'
.
Скажите, пожалуйста, как я могу отправить ответ json вместе с представлением.