如何使用 Node.js 将 JSON 数据从 Node.js 发送和获取到 HTML

Posted

技术标签:

【中文标题】如何使用 Node.js 将 JSON 数据从 Node.js 发送和获取到 HTML【英文标题】:How to send and get JSON data from Node.js into HTML using Node.js 【发布时间】:2018-01-09 00:49:14 【问题描述】:

我目前正在尝试建立简单的在线论坛,人们可以在其中发布 cmets;但是,我不确定我的写作方式是否正确。选择type="POST"提交表单后是否会自动调用Ajax?

我也不确定我是否在路由文件中编写了正确的程序。

这是我的代码。

<!DOCTYPE>
<html lang="en">
<head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  <script>
// $(function()
//     $("#target").submit(function(event)
//         event.preventDefault();
//         $.post("/users", function(data)
//             $( "#result" ).html( JSON.stringify(data) );
//         );
//     );
// );
//Not sure which way I should use ↑↓

$.ajax(
 type: "GET",
 url: 'http://localhost3000/users',
 data: data,
 dataType: 'json'
)

.done(function(data)
  console.log("GET Succeeded");
  $('#result').html(JSON.stringify); //What should I put after JSON.stringify?
);

 $(function()
     $("#target").submit(function(event)
      $.ajax(
        type: "POST",
        url: 'http://localhost3000/users',
        data: data,
        dataType: 'json'
      )

      .done(function(data)
        console.log("POST Succeeded");
        $('#result').html(JSON.stringify); //What should I put after JSON.stringify?
      );
    );
 );



</script>
</head>
<body>

<div id="result"></div>

<form action="/users" method="post" id="target">
  Username:<input type="text" name="username">
  <input type="submit" value="Post">
</form>

</body>
</html>

这是我的路线文件

var express = require('express');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');

var Users = require('../models/users');

var userRouter = express.Router();
userRouter.use(bodyParser.json());

userRouter.route('/')

.get('/users', function (req, res, next) 
        Users.find().then(function(user)
          res.json(user)
        ).catch(next);
)

.post(function(req, res, next)
//  res.send("Confirmed");
  Users.create(req.body).then(function(user)
    res.send(user);
  ).catch(next);

  res.json(newUser);
);

module.exports = userRouter;

这是我的 app.js

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');

var url = 'my database';
mongoose.connect(url);

mongoose.Promise = global.Promise;

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () 
    // we're connected!
    console.log("Connected correctly to server");
);


var routes = require('./router/index');
var userRouter = require('./router/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded( extended: false ));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/users', userRouter);
//Error handler for user
app.use(function(err, req, res, next)
  res.status(422).send(error: err.message);
);

//catch 404 and forward to error handler
app.use(function(req, res, next) 
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
);

// error handler
if (app.get('env') === 'development')
  app.use(function(err, req, res, next)
    res.status(err.status || 500);
    res.render('error', 
      message: err.message,
      error: err
    );
  );
  );

app.use(function(err, req, res, next)
  res.status(err.status || 500);
  res.render('error', 
    message: err.message,
    error: 
  );
 );

module.exports = app;

谢谢:)

【问题讨论】:

您指的是当表单处于焦点或单击提交按钮时用户按下enter 的那一刻? 我正在尝试建立所有cmet发布的论坛都已经在评论表单上方,当用户点击提交按钮时,该评论也应该发布在其他人已经发布的所有cmet下方。 哦。单击提交按钮时 【参考方案1】:

您的 ajax 帖子不会在表单提交时自动调用。但是,话虽如此,浏览器确实会向表单标签中的指定端点发送post

如果您需要在发布帖子时自动显示 cmets,那么您可以在脚本中使用带注释的代码块。

另一种方法是执行以下操作....

$(function()
    $("#target").submit(function(event)
        // add code here to append the form data to the DOM

        // dont call event.preventDefault()

        // doing so will take advantage of the browser's 
        // post functionality while giving you a chance
        // to handle the form data locally prior to the post

    );
);

【讨论】:

【参考方案2】:

我推荐postman chrome插件,它是一个restful api客户端,你先通过它调用api,然后如果api执行得很好,你可以写ajax post。

【讨论】:

如果你写了ajax帖子,别忘了让节点服务器发送带有Access-Control-Allow-Origin标头的响应,因为js中不允许跨域

以上是关于如何使用 Node.js 将 JSON 数据从 Node.js 发送和获取到 HTML的主要内容,如果未能解决你的问题,请参考以下文章

在 Node.js/Express.js 中,如何将 JSON 对象从服务器传输到客户端?

如何使用 node.js 将 EXCEL 文件数据读取到 json

如何通过使用 node.js 从实时 json 数据中提取特定字段来创建新的单个 json 对象

如何使用 node.js 将多行 JSON 数据同时插入 MySQL?

如何使用 node.js 访问 json 对象的子元素

在 Node.js 中,模块如何从应用程序的 package.json 中获取数据?