【发布时间】:2020-05-19 13:32:32
【问题描述】:
我正在从我的 POST 请求中接收我的数据。我想将该数据用作 GET 请求中的变量。来自 POST 请求的数据是用户输入的,以便在 3rd 方 API 上进行不同的查询> 如何将我的数据保存为变量来执行此操作?你可以看到我的 request.body 被保存为 const 数据。我需要它在我的获取请求中用作 ${data} 。我对此很陌生,所以任何关于最佳实践的建议都将不胜感激。感谢您的帮助。
Server.js
app.get(`/getmovies`, (req, res) => {
request(`http://www.omdbapi.com/?t=${data}&apikey=${API_KEY}`,
function (error, response, body) {
if (!error && response.statusCode == 200) {
var parsedBody = JSON.parse(body);
res.send(parsedBody)
} else {
console.log("error in the server")
}
}
)
})
app.post('/postmovie', (request, response) => {
console.log("I got a request!")
console.log(request.body);
const data = request.body;
response.json({
status: 'success',
name: data
})
})
///Client
postMovie = async (e) => {
e.preventDefault();
const data = this.state.movie;
const options = {
method: 'Post',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data)
};
const response = await fetch('/postmovie', options);
const json = await response.json();
console.log(json);
};
getMovies = (e) => {
e.preventDefault();
const { movie } = this.state;
axios.get(`/getmovies`)
.then(response => this.setState({ movies: response.data }))
// .then(response => this.setState({ movies: response.data }))
.catch(err => console.error(err))
}
render() {
const { movie } = this.state;
return (
<div>
<section className="form-container">
<div className="movie-form-div">
< form>
<input className="form-input" type="text" name="name"
value={movie.name}
onChange={e => this.setState({ movie: { ...movie, name: e.target.value } })} />
<button onClick={this.getMovies}>Search</button>
<button onClick={this.postMovie}>Post</button>
</form >
</div>
</section>
【问题讨论】:
-
你试过设置全局变量吗?否则你不能,这没有任何意义。它们的范围不同。此外,如果 node.js 与其他 Web 语言类似,则端点可能位于不同的线程上(不确定 node)。无论如何,您不应该这样做,因为每次应用程序重新启动时您也会丢失数据。像其他人一样使用数据库来保存信息
-
明确一点,设置全局变量也没有意义。糟糕的做法。
-
当它只使用一次时,将它存储到数据库中是没有意义的。它只是第 3 方 api 的查询参数,用于显示电影。它可以很容易地在客户端完成,但需要一个 API 密钥。
-
为什么不通过应用程序配置传递 API 密钥?我不明白为什么它必须来自客户端?它们是一个使用键吗?无论如何,最坏的情况为什么不将其作为 get 请求的查询参数呢?或者设置一个cookie
-
我不知道如何做这些事情,这就是我问这个问题的原因。哈哈。它必须来自客户端,因为它是用户输入的变量。
标签: javascript node.js reactjs rest