#node.js #reactjs #express
#node.js #reactjs #экспресс
Вопрос:
Я пытаюсь передать переменные из index.html к моему приложению react, которое скомпилировано и запущено на сервере express / node локально. Я пытался использовать объект window, но node.js не распознаете объект window.
В основном, после загрузки приложения index.html получите информацию о пользователе из строки запроса и отправьте данные в UserController. Смотрите код ниже
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="telephone=no" name="format-detection">
<meta content="no" name="msapplication-tap-highlight">
<meta content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width" name="viewport">
<title>App Frontend</title>
</head>
<body>
<div id="root"></div>
<script src="js/compiledscript.js"></script>
<script>
new AppCode({
root: document.getElementById('root'),
host: 'http://localhost:3500',
endpoints: {
folder: '/api/folder',
file: '/api/file'
},
headers: {
'Content-Type': 'application/json'
}
});
//Get iframe data query from parent
function getParamValue(paramName)
{
var url = window.location.search.substring(1); //get rid of "?" in querystring
var qArray = url.split('amp;'); //get key-value pairs
for (var i = 0; i < qArray.length; i )
{
var pArr = qArray[i].split('='); //split key and value
if (pArr[0] == paramName)
return pArr[1]; //return value
}
}
var userData = {
username: getParamValue('username'),
userid: getParamValue('userid')
}
window.userData = userData;
//console.log(getParamValue('username'));
//console.log(getParamValue('userid'));
</script>
</body>
</html>
userController.js
const mongoose = require('mongoose');
const path = require('path');
const fs = require('fs');
const User = mongoose.model('User');
//const users = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'data', 'users.json'), 'utf-8'));
/*
const users = window.userData;
const userid = users.userid;
exports.userid = userid;
*/
exports.getAll = async (req, res) => {
const users = await User.find();
res.json(users);
};
exports.bang = async (req, res, next) => {
await User.remove();
next();
};
exports.addNewUser = async (req, res, next) => {
await User.create(users);
// next();
};
Комментарии:
1. Вместо этого вы могли бы прочитать строку запроса в
componentDidMount
вашем самом верхнем компоненте React.
Ответ №1:
Если вы отправляете HTML-файл как статический файл,
Вы можете сделать это решение:
Решение:
установите ejs
, выполнив команду npm i ejs
, затем измените ваш файл с index.html
на index.ejs
,
добавьте эту строку в свое приложение app.set('view engine', 'ejs');
и отправьте файл по
res.render('index.ejs', {
// here data to pass
});
затем вы можете передать данные index.ejs
, и они будут отображаться
вы можете прочитать документы здесь, это прояснит изображение больше.
если вы можете использовать рендеринг на стороне сервера
тогда решением было бы сокращение
Комментарии:
1. Я использую const router = express . Маршрутизатор (); внутри моего index.js файл маршрута
2. Я вижу это уже в app. app.set (‘view engine’, ‘pug’);
3. если вы устанавливаете механизм просмотра на pug, почему вы его не используете?
4. Я кодирую / обновляю существующее приложение, поэтому некоторые вещи уже внутри app.js Я понятия не имею о том, как все было устроено. Учусь по ходу дела. Просто нужно передать данные из index.html к другим частям приложения.
5. что именно вы пытаетесь сделать (что делает приложение) (рендеринг на стороне сервера, рендеринг на стороне клиента)?