如何写出正确的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.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);
});
编辑: 根据下面的评论,您似乎正在努力处理客户端向服务器发出的不同请求。浏览器加载页面是一次请求和一次响应。如果该页面包含需要获取数据的 JavaScript,那将是一个单独的 AJAX 请求,其自己的响应仅包含该数据。
可以使用 JSON(或任何数据)服务器端来填充页面模板并使用数据 return 整个页面。为此,您需要在服务器端代码中使用(或构建)某种模板引擎来填充页面,然后再 returning 它。
我创建服务器(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.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);
});
编辑: 根据下面的评论,您似乎正在努力处理客户端向服务器发出的不同请求。浏览器加载页面是一次请求和一次响应。如果该页面包含需要获取数据的 JavaScript,那将是一个单独的 AJAX 请求,其自己的响应仅包含该数据。
可以使用 JSON(或任何数据)服务器端来填充页面模板并使用数据 return 整个页面。为此,您需要在服务器端代码中使用(或构建)某种模板引擎来填充页面,然后再 returning 它。