【问题标题】:Node.js API / server post requestNode.js API / 服务器发布请求
【发布时间】:2014-11-04 19:16:57
【问题描述】:

我几次前启动了 Node.js 和一般 web,现在我有一个项目,我必须在 Express 上运行的 nodejs 中开发一个带有 API 的 web 服务器,我想正确地做,但我不确定是否有一个好方法。

它与我发送到我的 API 的每个帖子请求有关,这是一个示例:

注册:

我有一个路由 app.get('/signup'),我正在向我的 API 发送一个发布请求以创建新用户。所以根据我的猜测,我发送了一个带有action = /signupmethod = "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 发送变量到 get 吗? (带有重定向)?

【问题讨论】:

  • 我无法理解你的问题。请说得更清楚。

标签: node.js api post server


【解决方案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('/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 变量。
猜你喜欢
  • 1970-01-01
  • 2019-03-26
  • 2020-09-17
  • 2016-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多