javascript - 将变量从 Express 服务器传递到 React 前端
问题描述
我是 MERN 堆栈的新手,如果这是一个愚蠢的问题,请原谅我。我正在制作一个应用程序,它将转到某个 url,获取一些文本并将其粘贴到前端。
所以在步骤中,这是按顺序发生的。
- URL 被粘贴到一个输入字段中,该字段被传递给一个 React 状态[Hooks]
- 单击提交按钮,使用 axios.post 将 URL 传递到 express.js 端点
- url 在 express.js 中通过 app.post 方法获取
- URL 通过 puppeteer 脚本传递,该脚本将返回的文本保存在名为“rawTxt”的变量中
- 这是我感到困惑的地方
我想将变量 BACK 传递给前端的显示做出反应,但我似乎无法让它工作!有人可以帮我理解如何将这个变量传回来吗?
相关代码:
React.js 文件:
const [searchUrl, setSearchUrl] = useState("");
const handleSearch = () => {
axios
.post(`${API}/jobsearch`, {
searchUrl: searchUrl,
})
.then(() => console.log("Searched"))
.catch((err) => {
console.error(err);
});
};
Express.js 文件
app.post("/jobsearch", async (req, res) => {
const string = await scrapeJob(req.body.searchUrl);
await res.send(string);
console.log(string);
});
async function scrapeJob(url) {
const browser = await puppeteer.launch();
const page = await browser.newPage();
page.setUserAgent(
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36"
);
await page.goto(url);
await page.screenshot({
path: "screenshot.png",
});
const [el] = await page.$x(
"/html/body/div[2]/div[5]/div[1]/div[1]/div/div/div[1]/div/div/div[1]/div/h1"
);
const txt = await el.getProperty("textContent");
const rawTxt = await txt.jsonValue();
browser.close();
return rawTxt;
}
解决方案
您可以在.then
您的 Axios 发布请求的方法回调中访问服务器返回的数据。promise 的解析值将作为参数传递给您的回调函数,然后您可以将其保存到您的 React 组件状态,如下所示:
const [searchUrl, setSearchUrl] = useState("");
const [searchRes, setSearchRes] = useState("");
const handleSearch = () => {
axios
.post(`${API}/jobsearch`, {
searchUrl,
})
.then((res) => {
setSearchRes(res.data);
})
.catch((err) => console.err(err));
};
顺便说一句,上面示例中的另一个技巧是使用 ES6 简写来进行对象属性分配。如果属性名称与声明的变量的名称相同,只需列出属性名称即可将变量分配给属性:
const data = {
searchUrl
}
// is the same as:
const data = {
searchUrl: searchUrl
}
推荐阅读
- asp.net - 如何在 asp.net api 响应中包含嵌套列表
- r - 根据 ID 选择数据行
- c# - 关于通过协程暂停 if 语句的问题
- python - 按小写先大写再数字的顺序排序,然后将数字排序为奇数不优先
- php - 我想从 Prestashop 打开我的管理面板,但出现此错误:尝试从全局命名空间调用函数“simplexml_load_string”
- java - Java中的条件运算符,我不希望假布尔值做任何事情
- python - Pandas 删除对一列具有不同值的行,但对所有其他列重复
- php - ChromeOptions 不工作 - PHP WebDriver
- python - 给定一组索引,在数据框中的每个索引之间聚合
- nestjs - 内连接以获取 typeorm 中的平均值