我几次开始使用Node.js和一般网络,现在我有一个项目,我必须开发一个带有运行在Express上的nodejs中的API的Web服务器,我想要正确地做,但我不确定是否这是一个很好的方法。
它关注我发送给我的API的每个帖子请求,这是一个例子:
注册:
我有一个路由app.get('/signup')
,我正在向我的API发送一个帖子请求来创建新用户。所以我猜我会发送一个包含action = /signup
method = "post"
的表单,这意味着我的服务器上有app.post('/ signup')。在这篇文章中,我创建了一个包含表单中所有信息的帖子请求,然后将其发送到创建用户的API并发送回app.post('/signup')
答案。所以基本上,这里是架构:
Get('/signup') -> Post('/signup') -> API('createUser') -> Post('signup')
然后我想回到我的app.get('/ signup'),因为我不想发送html表单的帖子,并说“嘿它没关系”而不是显示表单所以我我正在进行重定向,但我怎么知道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');
});
});
这是一个好方法吗? 除了会话变量之外,还有另一种方法从post发送变量吗? (使用重定向)?
答案 0 :(得分:1)
我不确定我是否完全理解这个问题,但这就是我使用node.js处理表单提交的方式。
使用jQuery / Ajax提交表单,这样我们就可以在POST后从服务器获得响应。
$('#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(&#39; /注册&#39;)请求,并在完成API调用后,返回状态消息:< / p>
res.json({message: 'User created successfully.', success: '1'});
然后,您可以使用此JSON响应执行相应的操作。