虽然您可以从中间件返回数据,但这可能不是您想要做的。中间件是在后端接收请求和获取资源之间执行的一段代码。在中间件中,您可以执行诸如检查用户是否有权访问某个资源或通过请求传递的某种凭据对用户进行身份验证等操作。
无论哪种方式,您通常会通过 XmlHttpRequest 从前端向后端发出请求。这些请求通常是异步的,因此它们的使用不会在执行时阻塞整个页面。有很多方法可以创建 XmlHttpRequest。原生 Javascript 方式有点难看,所以我建议改用 fetch api。如果您需要做更复杂的事情,您也可以使用第三方库。我个人喜欢axios,但这取决于你。
为了让你更好地理解 Express 在做什么,它基本上是一个等待 http 请求的无限循环。您需要定义路由,执行返回数据的函数。
这是一个基本示例。请注意,此脚本是通过 NodeJS 执行的:
// myserver.js
const express = require('express')
const app = express()
app.get('/cities', (req, res) => {
const cities = /** somehow get all the cities **/
res.json(cities);
})
/** the rest of the server... **/
/** For example, the route for Countries **/
在前面的示例中,我们构建了一个基本服务器,它监听 url localhost:3000/cities 并在获取该 url 时执行一个函数。上述函数将获取所有城市并将它们作为 JSON 返回。
在您的前端,您需要执行一个调用此 url 的 XmlHttpRequest,以让服务器执行该函数,该函数将返回数据。呼……我希望我没有在那儿失去你。
一个典型的例子是使用 fetch api 的简单调用。
请注意,此脚本是在浏览器中执行的。
// myclient.js
async fetchAllCities() {
const cities = await fetch('http://localhost:3000/cities');
console.log(cities);
}
// just for fun, we add a click listener on a button and call the function defined above.
document.getElementById('myButton').addEventListener('click', async function() {
// we fetch the cities when we click on the button !
await fetchAllCities();
});
在前面的示例中,我使用fetch 函数来调用我们在 Express 服务器中声明的 url。
我也在使用 Async / Await,这可能有点棘手,但这只是意味着在继续之前等待数据在那里。
我强烈建议阅读该主题。以下是一些参考资料。
How do I return the response from an asynchronous call?
Understanding async/await on NodeJS.
Await from MDN
我希望这个 XmlHttpRequest 的简要概述能帮助您了解 API 的工作原理。