我创建服务器(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数据?
res.json()
表示Express应用程序在收到HTTP请求时发送的HTTP响应。 另一方面,res.sendfile()
在给定路径传输文件。
在这两种情况下,流基本上都被转移到可能已经发出请求的客户端。
因此,不能一起使用res.sendfile
和res.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);
});