首页 > 解决方案 > 在 NodeJS 中响应后停止显示 JSON 结果

问题描述

我在 nodejs 应用程序中有一个 response.send:

this.app.post('/profile', (req, res) => {                        
            let password = req.body.password;            
            let newWallet = operator.createWalletFromPassword(password);
            let projectedWallet = projectWallet(newWallet);
            return res.send(projectedWallet);          
});

每次我在 html 中按下按钮时,它总是会做我的帖子并在 html 页面中返回 JSON 结果。

{"id":"f4c02f2463c8f83218f324d4193e08b8812fe914e24063217d29e65966abbe85","addresses":[]}

但是我不想看到它,那么我怎样才能隐藏或重定向到另一个页面(比如我之前设置的'/profile')?

编辑:这是我的客户端代码

<form action="/profile" method="post">
                        <p>
                            <% var ten = user.username %>
                            <strong>id</strong>: <%= user.id %><br>
                            <strong>username</strong>: <%= ten %><br>
                            <strong>password</strong>: <%= user.password %>
                        </p>
                        <p id="passwd" name="passwd" ><%= user.username %></p>
                        <textarea id="myTextArea" cols=50 rows=10></textarea>
                        <!-- these fields will be sent to server -->
                        <input type="hidden" name="username" value="<%= user.username %>">
                        <input type="hidden" name="password" value="<%= user.password %>">

                        <button type="submit" class="btn btn-warning btn-lg" onclick="/profile">Wallet</button>
                    </form>

标签: javascriptnode.jsexpressejs

解决方案


问题是您正在从浏览器到节点进行 POST。此 POST 的结果将由浏览器显示。

如果您不想看到 JSON 数据,请更改:

return res.send(projectedWallet);          

类似于:

res.redirect('new url');

或者:

res.render('some page');

或者:

res.send('I hate json! ;)');

如果你真的想要 JSON,我建议从:

return res.send(projectedWallet);

至:

res.json(projectedWallet);

因为这会设置所有正确的标头并正确地对 JSON 输出进行字符串化。

更新

如果您想创建一个将发布您的值然后将 JSON 放入文本区域的表单,正如您在对此答案的评论中描述的那样,那么您需要使用客户端 java 脚本和 AJAX 调用。

有关详细信息,请参阅https://stackoverflow.com/a/46642899/1253074


推荐阅读