【问题标题】:AJAX call to/from MongoDB example for Node/Express?AJAX 调用/来自 Node/Express 的 MongoDB 示例?
【发布时间】:2019-03-22 21:44:08
【问题描述】:

这是从一个非常基本的页面开始:HTML 表单、一个按钮和一个 div 框。

.click 按钮将通过 AJAX POST 表单数据。

数据将存储在 MongoDB 中,并在不刷新页面的情况下检索到 div-box。

来自 index.html 的 AJAX:

$(document).ready(function()
{   

    // handle button clicks         
    $('#buttonID').click(function() {

        // make an ajax call
        $.ajax({
            dataType: 'jsonp',
            jsonpCallback: '_wrapper',
            data: $('#formID').serialize(),
            type: 'POST',
            url: "http://localhost:9999/start",
            success: handleButtonResponse,
            });
    });

    function handleButtonResponse(data)
    {
        // parse the json string
        var jsonObject = JSON.parse(data);
        $('#reponseID').append( jsonObject.message );
    }

});

app.js:

var express = require('express'),
    app = express();
    cons = require('consolidate');
    MongoClient = require('mongodb').MongoClient,
    Server = require('mongodb').Server;

app.engine('html', cons.swig);
app.set('view engine', 'html');
app.set('views', __dirname + "/views");

var mongoclient = new MongoClient(new Server('localhost', 27017,
                                                { 'native_parser' : true }));

var db = mongoclient.db('database_name');

app.get('/', function (req, res) {

    db.collection('collectionName').find({}, function (err, doc) {
            res.render('index', doc);   
    });

    response.writeHead(200, {"Content-Type:": "application/json"}); 
    var submittedPost = {};
    submittedPost['message'] = 'Proof that Node and Mongo are working..';
    response.write( "_wrapper('" );
    response.write( JSON.stringify(submittedPost) );
    response.write( "')");              
    response.end();

});

app.get('*', function (req, res) {
    res.send("404..", 404);
});

mongoclient.open(function (err, mongoclient) {

    if (err) throw err

    app.listen(9999);
    console.log("Express server started on port 9999");
});

JSON 如何/在何处连接到 MongoDB?

此外,Express 是否需要模板引擎,例如 Consolidate?如果是这样,它如何/在哪里适合?

【问题讨论】:

    标签: javascript jquery ajax node.js mongodb


    【解决方案1】:

    一些建议

    关于 index.html 中的 ajax 调用

    1. 如果您的index.html 由同一台服务器提供服务,请不要使用跨域调用。 $.ajax 中的 url 属性可以是一个相对 URL,例如 /start
    2. 你也可以考虑不使用jsonp请求。

    电话可能是这样的

    $.ajax({
        dataType: 'json',
        data: $('#formID').serialize(),
        type: 'POST',
        url: "./start",
        success: handleButtonResponse,
    });
    

    JSON 如何/在何处连接到 MongoDB?

    在您请求./start 的ajax 调用中,因此应该在您的快速服务器中进行相同的路由。喜欢

    app.get('/start', function (req, res) {    
        db.collection('collectionName').insert({req.data}, function (err, doc) {
               //rest of code 
        });    
    });
    

    Express 是否需要模板引擎,例如 Consolidate?如果是这样,它如何/在哪里适合?

    你有很多模板选择,比如jade、ejs、hbs等等。 如果您使用玉石或其中任何一种,您在快速路由中的 html 渲染代码将得到简化。

    没有模板引擎

    response.writeHead(200, {"Content-Type:": "application/json"}); 
    var submittedPost = {};
    submittedPost['message'] = 'Proof that Node and Mongo are working..';
    response.write( "_wrapper('" );
    response.write( JSON.stringify(submittedPost) );
    response.write( "')");              
    response.end();
    

    使用像jade(现在是哈巴狗)这样的模板引擎

    var submittedPost = {};
    submittedPost['message'] = 'Proof that Node and Mongo are working..';
    response.json(submittedPost);
    

    还可以使用模板引擎来渲染带有服务器端变量的模板,并且可以在模板中访问它们,例如

    app.get('/mypage', function (req, res) { 
        res.render('mytemplate_page',{template_variable:some_variable});
    });   
    

    您可以在模板内使用template_variable 进行循环或显示。

    【讨论】:

    • 感谢您提供非常有帮助的答案。 (submittedPost) 与 {req.data} 有何关系?
    • 那只是为了演示服务器端的ajax路由。希望对您有所帮助。
    猜你喜欢
    • 2012-07-27
    • 1970-01-01
    • 2022-08-18
    • 2018-01-13
    • 2013-05-14
    • 1970-01-01
    • 2018-03-06
    • 2017-01-05
    • 1970-01-01
    相关资源
    最近更新 更多