Я пытаюсь получить информацию с моего основного сайта. После того, как ввод будет отправлен, страница должна перенаправить на /view. Кажется, что он успешно перенаправляется на /view (потому что console.info() запускается, но res.render не работает. Если я вручную перейду на /view, он отобразит страницу.
Вот код моего файла app.js:
// load the things we need
var express = require('express');
var app = express();
let bodyParser = require("body-parser");
let article = '';
//Set the view engine to ejs
app.set('view engine', 'ejs');
app.use('/static', express.static('static'))
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json())
//Index page
app.get('/', function (req, res) {
res.render('index')
});
//Get the input from the form
app.post('/searcharticle', function (req, res) {
article = req.body.article;
res.redirect('/view')
return article;
});
//Page to output the input
app.get('/view', function (req, res) {
console.info(article)
res.render('view', {
article: article
})
})
app.listen(8080);
console.info('Server on 8080');
А вот и мой структура папок
Спасибо за помощь!
нет ошибок нет вывода @ mehta-rohan
нужно увидеть структуру ваших папок
Я добавил структуру папок в вопрос @ mehta-rohan
Несвязано: в вашем коде есть состояние гонки, потому что вы храните article глобально. Данные, специфичные для запроса, не входят в глобальную область видимости. Вы можете, например, сохранить req.body.article в сеансе, файловой системе или базе данных. Или просто res.render прямо в обработчике POST (также нет необходимости возвращать из него что-либо, поскольку возвращаемое значение отбрасывается)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Предположим, у вас есть все ваши файлы .ejs в папке просмотров, попробуйте добавить эту строку в свой код:
const path = require('path'); //npm install -S path in your console to install path.
//Set the view engine to ejs
app.set('views', path.join(__dirname, 'views')); // add this one, change 'views' for your folder name if needed.
app.set('view engine', 'ejs');
app.use('/static', express.static('static'))
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json())
Я добавил строки, но он все еще не работает. Я получаю такие же результаты.
не могли бы вы поделиться своей структурой папок?
проблема может быть в app.set ('views', ..)
Я добавил ссылку на структуру внизу вопроса
Если вы запускаете свой сервер из каталога, отличного от статического, вам необходимо добавить относительный путь
app.use ('/ static', express.static (__ dirname '/ static'))
Но css работает, поэтому со статическими файлами проблем быть не должно.
сначала используйте движок просмотра, а затем укажите каталог, в котором он будет использоваться.
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));
а для статических файлов используйте
app.use('/static',express.static(PATH.join(__dirname+'/static'));
Я просто получаю эту ошибку для app.use статических файлов: TypeError: Router.use () требует функции промежуточного программного обеспечения, но получил строку. Действительно ли это нужно app.use для таких статических файлов? У меня не было проблем с файлами css.
Извините, я забыл использовать экспресс-статику
Мне только что дал решение очень похожей задачи мой замечательный наставник. Форма входа «submit» была передана в jQuery («щелчок») и после аутентификации вызвала Res.Render результатов вызова API. Набор результатов вызова API был записан в журнал, но страница так и не была обработана, и ошибки не было.
Он сказал мне, что jQuery действует как «теневой» DOM, и что Res.Render также находится в этом теневом DOM. Я изменил форму входа на форму Post вместо jQuery на Click.
Это СРАБОТАЛО!
Я работал над этим несколько дней, даже не подозревая, что jQuery может вызвать такое препятствие.
Вы должны упомянуть макет
app.get('/', function (req, res) {
res.render('index',{layout:false})
});
есть ли ошибка?