Nodejs express新手求助:app.post
Nodejs express新手求助:app.post
现在想用app.post, 怎么能把要post的数据写进request里呢,除了http.request(options, cb_fn). 目标是在一个get之后做个post. 想法是,get的callback最后res.redirect(post_url), 但是不知道怎么把数据放进去
当然可以。根据你的需求,你希望在处理一个 GET 请求后,将某些数据通过 POST 请求发送到另一个 URL。你可以使用 express
和 axios
或者 node-fetch
来实现这一点。这里我将使用 axios
作为 HTTP 客户端来演示如何实现这个功能。
示例代码
首先,确保你已经安装了 express
和 axios
:
npm install express axios
然后,你可以编写以下代码:
const express = require('express');
const axios = require('axios');
const app = express();
const PORT = 3000;
// 解析请求体中的 JSON 数据
app.use(express.json());
app.get('/get', (req, res) => {
// 假设我们从 GET 请求中获取一些数据
const dataToPost = {
key1: 'value1',
key2: 'value2'
};
// 将数据存储在会话或查询参数中
req.session = { postData: dataToPost };
// 重定向到 POST 请求的 URL
res.redirect(`/post`);
});
app.post('/post', async (req, res) => {
try {
// 从会话或查询参数中获取之前保存的数据
const postData = req.session.postData;
// 发送 POST 请求到目标 URL
const response = await axios.post('http://example.com/post-url', postData);
// 处理响应
res.send(`POST request sent successfully! Response status: ${response.status}`);
} catch (error) {
console.error(error);
res.status(500).send('Error sending POST request.');
}
});
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
解释
-
GET 请求处理:
- 在
/get
路由中,我们假设从 GET 请求中获取了一些数据,并将其存储在req.session
中。 - 然后,我们使用
res.redirect
将用户重定向到/post
路由。
- 在
-
POST 请求处理:
- 在
/post
路由中,我们从req.session
中获取之前保存的数据。 - 使用
axios.post
方法将数据发送到指定的 URL(在这个例子中是http://example.com/post-url
)。 - 根据响应的状态码返回相应的结果。
- 在
这种方法确保了在 GET 请求处理完成后,可以将必要的数据传递给 POST 请求。
不大明白楼主的意思。redirect 通常是个get. 不过我可能理解有误,req.session.post_data=“asdfasf”, 是否可以?
post需要浏览器发起,你redirect是不行的。楼主不如忘了你现在的方案,把你想要做什么写出来,让大家给你想想办法。
我现在是在做github OAuth的认证。http://developer.github.com/v3/oauth/
从第一步得到code后,POST https://github.com/login/oauth/access_token, 和一些其他已知的数据。我想说post不用用户出发,直接在第一步后做。现在我是用js: $.ajax(method:post), 但是有些数据都是敏感的,这样很不好的
我是想说 有什么办法可以在 function(req, res) { 这个是某个get的处理函数,能在这里面直接出发个post吗? }
应该http.request 到github
数据用: req.write("asdfasdf“) req.end()
我的想法不合理。
合理的,你要的是client http, 这儿有个例子,你说的数据就是用write, 然后end结束。 http://www.nodejs.org/api/http.html#http_http_request_options_callback
我的想法是做http嵌套,http 的设计就是一次性的请求返回。我明白你的意思。之前我看过了。我原来的想法是: function(req, res) { new https; https.request(post_request, function(response) { response.verb … }); }
有两个httpresponse的object: res, response, 没什么必要,也不符合http协议的制定。
在Express中使用app.post
接收POST请求时,你需要在客户端发起一个POST请求,并将数据包含在请求体中。如果你希望通过GET请求后重定向到一个POST URL,并且希望在重定向时传递一些数据,通常的做法不是直接在GET响应中进行重定向,而是将数据保存在会话或数据库中,然后在POST请求处理逻辑中读取这些数据。
示例代码
客户端(发起POST请求)
假设你想通过表单提交数据:
<!-- form.html -->
<form action="/submit" method="POST">
<input type="text" name="data" />
<button type="submit">Submit</button>
</form>
服务器端(处理POST请求)
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded({ extended: false })); // 解析URL编码的请求体
app.use(bodyParser.json()); // 解析JSON格式的请求体
// 处理POST请求
app.post('/submit', (req, res) => {
const data = req.body.data;
console.log('Received data:', data);
res.send(`Received data: ${data}`);
});
// 处理GET请求并重定向
app.get('/get', (req, res) => {
res.send('<a href="/submit">Submit your data</a>');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
解释
- 客户端:创建一个简单的HTML表单,当用户点击提交按钮时,浏览器会向
/submit
发送POST请求。 - 服务器端:
- 使用
body-parser
中间件解析请求体中的数据。 - 在
/submit
路径上定义POST处理函数,获取并打印从请求体中接收到的数据。 /get
路径上的GET请求处理函数返回一个链接,该链接指向/submit
。
- 使用
这种方法允许你在用户提交表单时触发POST请求,并在服务器端处理数据。如果需要从GET请求中传递数据到POST请求,可以考虑使用session或cookie来存储临时数据。