Node.js API/服务器post请求
我在几天前开始了Node.js和general web,现在我有一个项目,我必须开发一个web服务器,在Express上运行nodejs中的API,我想正确地完成它,但我不确定是否有好的方法来完成它 它涉及我发送到API的每个post请求,下面是一个示例: 注册: 我有一个路由Node.js API/服务器post请求,node.js,api,post,server,Node.js,Api,Post,Server,我在几天前开始了Node.js和general web,现在我有一个项目,我必须开发一个web服务器,在Express上运行nodejs中的API,我想正确地完成它,但我不确定是否有好的方法来完成它 它涉及我发送到API的每个post请求,下面是一个示例: 注册: 我有一个路由app.get('/signup'),我正在向我的API发送一个post请求以创建新用户。因此,根据我的猜测,我发送了一个带有action=/signupmethod=“post”的表单,这意味着我的服务器上有app.po
app.get('/signup')
,我正在向我的API发送一个post请求以创建新用户。因此,根据我的猜测,我发送了一个带有action=/signup
method=“post”
的表单,这意味着我的服务器上有app.post(“/signup”)。在本文中,我使用表单中的所有信息创建了一个post请求,并将其发送到创建用户的API,然后将答案发送回app.post('/signup')
。基本上,这里是模式:
Get('/signup') -> Post('/signup') -> API('createUser') -> Post('signup')
然后我想回到我的app.get('/signup'),因为我不想在post-one中发送html表单,并说“Hey it's ok”,而不是显示表单,所以我正在进行重定向,但我怎么知道在get('/signup')
中显示什么呢?我可以发送一个变量来知道向用户显示什么吗?顺便问一下,这是正确的方法吗
谢谢
PS:看起来不太清楚,所以代码如下:
app.get('/signup', function(req, res) {
res.setHeader('Content-Type', 'text/html');
if (req.session.userId) { res.end("Connected as " + req.session.name); }
else {
res.end('<html><p>As a guest, you\'re signing up : </p><form action="/signup" method="post">' +
'First name: <input type="text" name="firstname"><br>' +
'Last name: <input type="text" name="lastname"><br>' +
'email: <input type="text" name="email"><br>' +
'password: <input type="text" name="password"><br>' +
'role: <input type="text" name="role"><br>' +
'<input type="submit" value="Submit">' +
'</form></html>');
}
});
app.post('/signup', function(req, res) {
request.post({
url: 'http://localhost:4242/signup',
form : {
firstname : req.body.firstname,
lastname : req.body.lastname,
email : req.body.email,
role : req.body.role,
password : req.body.password
}},
function (error, response, body) {
res.redirect('/signup');
});
});
app.get('/signup',函数(req,res){
res.setHeader('Content-Type','text/html');
if(req.session.userId){res.end(“连接为”+req.session.name);}
否则{
res.end(“作为客人,您正在注册:”+
'名字:
'+
'姓:
'+
'电子邮件:
'+
'密码:
'+
'角色:
'+
'' +
'');
}
});
应用程序发布('/signup',功能(请求、回复){
请寄({
网址:'http://localhost:4242/signup',
表格:{
firstname:req.body.firstname,
lastname:req.body.lastname,
电子邮件:req.body.email,
角色:req.body.role,
密码:req.body.password
}},
功能(错误、响应、正文){
res.redirect('/signup');
});
});
这是做这件事的好方法吗?
除了会话变量外,还有其他方法从post发送变量以获取吗?(通过重定向)?我不确定我是否完全理解这个问题,但这就是我使用node.js处理表单提交的方式 使用jQuery/Ajax提交表单,这样我们就可以在发布后从服务器获得响应
$('#your-form').on('submit', function(e) {
e.preventDefault();
var formData = $(this).serializeArray();
$.ajax({
type: 'POST',
url: '/signup',
data: formData
}).success(function(response) {
if (response.success == '1') {
// Do something
} else {
// Do something - e.g. display an error message
}
});
});
然后在Node.js服务器上,您可以处理app.post('/signup')请求,完成API调用后,返回一条状态消息:
res.json({message: 'User created successfully.', success: '1'});
然后,您可以使用此JSON响应采取适当的操作。我就是不理解您的问题。请说得更清楚些。我们这里也使用了几乎完全相同的方法,它对于处理服务器响应非常有用。我更新了我的帖子,向您展示了我所做的,我想知道这是否是处理API响应的好方法。您试图通过重定向发送什么?您可以将其添加为参数值:
res.redirect('/signup?variable=string')然后使用req.query.variable
访问app.get('/signup')
函数中的变量。这样做是否正确?这取决于您发送的数据。如果它是敏感的,那么不要使用查询方法。如果敏感,请坚持使用req.session变量。