Nodejs 怎么实现这种场景,求指点

Nodejs 怎么实现这种场景,求指点

新手求教大神。 场景是这样的: 前端发来一个请求,后端根据请求从本站取得数据,然后将取得的数据发送请求到外站,外站返还回来的数据再渲染到本站前端。

11 回复

当然可以!以下是如何使用 Node.js 实现你描述的场景。我们将使用 http 模块来处理 HTTP 请求,并使用 axios 库来发起对外站的请求。假设前端发送一个请求到后端,后端获取本地数据,然后将这些数据发送到外站,最后将外站返回的数据发送回前端。

首先,确保安装了 axios

npm install axios

接下来是示例代码:

1. 安装依赖

npm install express axios

2. 创建服务器文件(例如 server.js

const express = require('express');
const axios = require('axios');

const app = express();
const port = 3000;

app.use(express.json()); // 解析 JSON 请求体

// 假设前端发送请求到 /data 路由
app.post('/data', async (req, res) => {
    try {
        // 从本地数据库或文件系统获取数据
        const localData = await getLocalData();

        // 将本地数据发送到外站
        const response = await axios.post('https://external-api.com/data', localData);

        // 外站返回的数据
        const externalData = response.data;

        // 渲染数据并返回给前端
        res.json(externalData);
    } catch (error) {
        console.error(error);
        res.status(500).json({ error: 'Internal Server Error' });
    }
});

// 假设从本地数据库或文件系统获取数据
async function getLocalData() {
    // 这里只是一个示例,实际情况下你可以从数据库或其他存储中获取数据
    return { key: 'value' };
}

app.listen(port, () => {
    console.log(`Server is running on http://localhost:${port}`);
});

3. 解释代码

  • Express: 使用 Express 来创建一个简单的 HTTP 服务器。
  • Axios: 使用 Axios 发起对外站的 POST 请求。
  • getLocalData: 这是一个模拟函数,用于从本地数据库或文件系统获取数据。你需要替换这部分代码以适应你的具体需求。
  • /data 路由: 当前端发送 POST 请求到 /data 路由时,服务器会先从本地获取数据,然后将这些数据发送到外站。外站返回的数据会被渲染并发送回前端。

4. 运行服务器

node server.js

这样,你就完成了一个基本的 Node.js 服务器,它能够处理前端请求,与外部 API 交互,并将结果返回给前端。希望这对你有帮助!


collection.findOne({…},{…}, function () {

http.get(url, function(data) { response. end(’…data…’) }) });

三个callback,应该还不至于用到async,直接写把。

只给前端json,具体的页面渲染交给前端的js。

  为什么新浪微博,京东,优酷 jsonp请求返回的数据是 带html标签的数据,这样不是很费流量吗,相对前端用js渲染,是不是输出html,直接innerHTMl赋值要方便省事?

早期的为了避免页面刷新而进行的ajax确实是这么做的,但是现在的页面越来越复杂,直接innerHTML对前端维护来说是个噩梦,而且不利于模块化,所以现在都是jsonp传必要的数据,具体的页面由浏览器来渲染了。

p.s. 因需求而定吧。

在下小白一枚,用过nodegrass模块来做爬虫。。。可以在服务端跨域进行AJAX请求,你可以试试。

谢过各位!

作者貌似停止维护了,所以可以试试 spidex 试试看。

后端做一个转发, 应该就可以完成吧

为了实现你描述的场景,可以按照以下步骤进行:

  1. 接收前端请求。
  2. 从本站获取数据。
  3. 使用获取的数据发起对外站的请求。
  4. 处理外站返回的数据。
  5. 将处理后的数据返回给前端。

下面是具体的实现示例:

示例代码

const express = require('express');
const axios = require('axios'); // 用于发起HTTP请求
const app = express();

app.get('/getData', async (req, res) => {
    try {
        // 1. 从本站获取数据
        const localData = await getLocalData();

        // 2. 使用本地数据对外站发起请求
        const remoteResponse = await getRemoteData(localData);

        // 3. 处理外站返回的数据并返回给前端
        res.json(remoteResponse);
    } catch (error) {
        console.error(error);
        res.status(500).send('Internal Server Error');
    }
});

async function getLocalData() {
    // 假设这是一个模拟函数,实际应用中可以从数据库或缓存中获取数据
    return { id: 1, name: 'Example' };
}

async function getRemoteData(localData) {
    // 使用axios发起对外站的请求
    const response = await axios.post('https://remote-api.com/data', localData);
    return response.data;
}

// 启动服务器
app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

解释

  1. 接收前端请求:使用express框架定义了一个GET路由/getData,当接收到前端的请求时会执行对应的回调函数。
  2. 从本站获取数据:通过调用getLocalData()异步函数来获取本地数据。在这个例子中,我们假设是从某个地方(如数据库)获取数据。
  3. 发起对外站的请求:使用axios库来发起HTTP POST请求到外站,并传递从本地获取的数据。
  4. 处理外站返回的数据:接收到外站返回的数据后,将其作为响应数据直接返回给前端。
  5. 错误处理:在整个过程中添加了错误处理机制,确保在发生错误时能够及时捕获并返回适当的错误信息。

以上就是整个流程的实现方式,希望对你有所帮助!

回到顶部