在nodejs中为ajax呼叫创建路由



假设我有这条路线用于渲染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调用后用户仍然为无效。

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

edit:首先,您需要在客户端JS中修复错误,然后在获取user之前尝试打印user.name从服务器。您可以通过将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中返回配置文件的信息。

就个人而言,我更喜欢第一个选项,因为它使意图更加清楚。

最新更新