提问者:小点点

如何编写正确的app.get()? (node.js/express/boby-parser)


我创建服务器(node.js/express/boby-parser)

并且我需要获得对象数组“用户”。 它来自server.js文件的部分代码:

let users = [{
    name: 'user1',
}];

app.get('/users/', (req, res) => {
    const filePath = path.join(pth.dir, 'build', 'index.html');
    res.json(users);
    res.sendFile(filePath);
});

这是我的前端代码:

const handleResponse = (response) => {
    return response.text().then(text => {
        const data = text && JSON.parse(text);
        if (!response.ok) {
            const error = (data && data.message) || response.statusText;
            return Promise.reject(error);
        }
        return data;
    });
};

const getAll = (baseUrl) =>  {
    const requestOptions = {
        method: 'GET'
    };
    return fetch(baseUrl, requestOptions).then(handleResponse);
};

我的服务器代码有问题。 (我只是不知道如何使用express服务器)。 当我使用getAll函数时,我得到了JSON文本替换我的页面。 有人能帮忙吗? 我应该如何在server.js中编写app.get()。 或者我需要在服务器第一部分中写入app.get()来获取页面,还是另一个app.get()来获取JSON数据?


共2个答案

匿名用户

res.json()表示Express应用程序在收到HTTP请求时发送的HTTP响应。 另一方面,res.sendfile()在给定路径传输文件。

在这两种情况下,流基本上都被转移到可能已经发出请求的客户端。

因此,不能一起使用res.sendfileres.json

var options = {
    headers: {
        'name': 'user1',
    }
  };

res.sendFile(path.join(__dirname, 'build', 'index.html'), options);

这真的是你能做的最接近实现期望的任务。

匿名用户

为什么要在响应中发送文件?:

res.sendFile(filePath);

对于初学者来说,响应内容可以是JSON,也可以是文件(当然也可以是其他各种东西中的任何一种),但不能两者兼而有之。 对于像JSON或XML这样的数据,可以将多个对象组合成一个更大的对象来进行单个响应,但如果内容类型完全不同,就像文件一样,这就行不通了。

查看您的客户端代码,您甚至没有对该文件进行任何操作。 您只读取JSON数据:

return response.text().then(text => {
    const data = text && JSON.parse(text);
    if (!response.ok) {
        const error = (data && data.message) || response.statusText;
        return Promise.reject(error);
    }
    return data;
});

所以这里最简单的方法就是不尝试发回文件:

app.get('/users/', (req, res) => {
    res.json(users);
});