在NodeJs

时间:2017-11-23 17:59:45

标签: javascript jquery node.js ajax express

让我说我的渲染HTML有这条路线:

app.get('/profile/:id', function (req, res) { // my route
    res.render('profile', { id: Number(req.params.id) }); // render the file and set a variable
});

在我的客户端javascript文件的配置文件页面我想从服务器获取数据。我通过向服务器发送用户ID并且服务器返回用户对象来加载页面时请求数据:

$(document).ready(function() {

    var user = null;

    $.ajax({
        type: 'GET',
        url: '', // This one is missing here
        dataType: 'json'
    }).done(function(data){
        user = JSON.stringify(data);
    });

    console.log(user.name);

});

我的服务器将处理此功能:

app.get('', function (req, res) { // missing route
    var userId = ; // This is missing
    var userObj = getUserById(userId);
    res.send(userObj);
});

我必须使用哪条路线?教程说我必须传递像/profile/:id这样的路线,但这条路线已经存在?

我尝试定义一条新路线,如:

app.get('/reqUser/:id', function (req, res) { // Ajax  route
    res.send(getUserById(Number(req.params.id)));
});

对于我的Ajax调用,我传入url http://localhost:8888/reqUser/12345,但这似乎是错误的,因为用户在使用Ajax调用后仍然为null。

那么如何定义处理页面和Ajax调用的路由?

1 个答案:

答案 0 :(得分:2)

修改:首先,您要修复客户端JS中的错误,在user.name之前您尝试打印user已从服务器获取。您可以通过将console.log语句移动到done()回调中来解决此问题,如下所示:

$(document).ready(function() {

    var user = null;

    $.ajax({
        type: 'GET',
        url: '', // This one is missing here
        dataType: 'json'
    }).done(function(data){
        user = JSON.stringify(data);
        console.log(user.name); // log here 
    });

});

关于您的路线问题,您有几种选择。以下是此问题的两种常见解决方案:

  • 创建单独的api路由,以区分您的API请求和您的网页请求。例如,app.get('/api/profile/:id, (req, res) => {...});'
  • 为您的AJAX调用添加一个URL参数,指定您希望响应的格式,默认为页面的HTML。例如,您的AJAX会向URL /profile/2012?format=json发送GET请求,该请求将返回JSON中的个人资料信息。

就个人而言,我更喜欢第一种选择,因为它使意图更清晰。