javascript - 在 NodeJs 中为 Ajax 调用创建路由

标签 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 调用后 user 仍然为 null。

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

最佳答案

编辑:首先,您需要修复客户端 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 格式返回配置文件的信息。

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

关于javascript - 在 NodeJs 中为 Ajax 调用创建路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47461227/

相关文章:

javascript - 尝试使用我的收藏时获取 "undefined is not a function"

javascript - Q.allSettled 在将任何内容推送到数组之前执行

javascript - 如何使用 JQuery 提取嵌套 HTML 中的文本?

javascript - Jade 将字符串数组渲染为字符串数组

events - 如何在 node.js (express.js) 中创建自定义事件监听器?

javascript - 将单击按钮的值存储在数组中

javascript - 通过拖放 fullcalendar-Javascript 来更新事件

javascript - 使用 animate() 在 javascript 中使用上一个/下一个按钮滑动图像

javascript - 物化模态从上到下打开

javascript - 嵌套动态地 react 相同的组件