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

How to write correct app.get()? (node.js / express / boby-parser)

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

我需要获取对象数组 'users'。 它的部分代码来自 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);
};

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

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);
});

编辑: 根据下面的评论,您似乎正在努力处理客户端向服务器发出的不同请求。浏览器加载页面是一次请求和一次响应。如果该页面包含需要获取数据的 JavaScript,那将是一个单独的 AJAX 请求,其自己的响应仅包含该数据。

可以使用 JSON(或任何数据)服务器端来填充页面模板并使用数据 return 整个页面。为此,您需要在服务器端代码中使用(或构建)某种模板引擎来填充页面,然后再 returning 它。