【问题标题】:node.js, append html into a return functionnode.js,将 html 附加到返回函数中
【发布时间】:2014-02-26 23:29:02
【问题描述】:

我正在使用 Node.js、Express、Jade 和 MongoDb 做一个 Web 应用程序。 我已经完成了一个页面,用户必须在其中将确认码放入表单中;这会调用一个检查代码是否正确的函数(checkConfirmationCode)。

我想在确认页面中附加一个 html 文本,例如“您的代码是对/错”。 函数是这样的:

exports.checkConfirmationCode = function(db) {
    return function(req, res) {
        var sentCode = req.body.confirmationCode;
        var rightCode= '123456';
        if(sentCode==rightCode)
            //append html to the request page
        else
            //append html to the request page
   };
};

这样做的最佳方法是什么? 我在考虑 jquery,类似

$("#content").append("your code is right/wrong")

但它不起作用,我应该使用任何 jquery npm,对吗? 这是一个好方法吗?

【问题讨论】:

  • 如果您想在不刷新页面的情况下执行此操作,则需要客户端 AJAX 请求——如果页面刷新没问题,只需使用 res.send("Your code is right")
  • 这样我会丢失页面的其余部分,我只看到“您的代码是正确的”
  • 是的 - 它加载一个新页面。如果要保留页面,则需要使用 AJAX 请求
  • 好的,现在如果我想用 res.send(A LOT OF HTML CODE) 发回整个页面,我该怎么办?

标签: jquery html node.js express append


【解决方案1】:

您的代码在服务器端(node.js) 并且您要放置警报消息的位置是客户端。

所以你必须将结果发送给客户端,让客户端以某种方式显示消息。

所以,

1.通过 Get/Post/socket.io/AJAX 或任何你喜欢的方式将用户写的东西发送到服务器

2.检查node.js中的代码是否正确

3.将结果作为http响应(整个页面的正文加上警报消息)发送给客户端或通过socket.io/AJAX异步发送结果

(仅限您使用 socket.io/AJAX 的情况)

4.当客户端收到结果时,通过jquery将结果消息附加到html中。

这里是socket.io的一个实例

服务器端

var io = require('socket.io');

io.sockets.on('connection',function(socket){
    socket.on('formAnswer',function(data){
        //check whether data.answer is correct answer or not
        if(data.answer = collect){
            io.sockets.socket(socket.id).emit({
                message : 'your code is right'
            });
        }else{
            io.sockets.socket(socket.id).emit({
                message : 'your code is wrong'
            });
        }
    });
});

客户端(模板文件,例如something.ejs)

<script>
var socket = io.connect();

socket.on('resultData',function(data){
    $("#content").append(data.message);
});
</script>
//send what user wrote when submit is pushed.
<script>
$answerForm.submit(function(e){
    socket.emit('formAnswer',{answer : 'what user wrote'});
});
</script>

【讨论】:

    【解决方案2】:

    正如tymeJV 所说,避免页面重新加载的唯一方法是绑定代码验证提交按钮以执行 ajax POST 到 express 端点,如果代码正确则返回 200,如果代码正确则返回 401(未授权)代码错误。

    exports.checkConfirmationCode = function(db) {
        return function(req, res) {
            // presumably DB lookup for rightCode here
            if(req.body.confirmationCode === rightCode) {
                res.send(200);
            } else {
                res.send(401);
            }
        }
    }
    

    并且您的快速设置应包括bodyParser 中间件,假设端点为/confirmCode,则为POST 路由:

    app.use(express.bodyParser());
    app.use(app.router);
    
    app.post('/confirmCode', checkConfirmationCode(db));
    

    【讨论】:

      猜你喜欢
      • 2016-03-27
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多