Nodejs做restful,异步蛋疼死了...

Nodejs做restful,异步蛋疼死了…

nodejs想做一个api…

1.接收帐号密码

2.读取一个网页,取一个token,加帐号密码一起提交

3.返回的内容,取cookie和一些内容,组装一个json结构

4.返回json结构

目前,1,4,用了10分钟就搞定了

但2,3用异步做蛋疼死了,谁有好点的方案呢?或者推荐轻一点的 restful框架

10 回复

Node.js 做 RESTful API 遇到异步问题

背景

使用 Node.js 开发 RESTful API 时,经常会遇到异步操作带来的复杂性和挑战。本文将介绍如何处理这些异步操作,并提供一个简单的示例来说明如何实现上述需求。

需求概述

  1. 接收账号密码。
  2. 读取一个网页,获取 token,并将其与账号密码一起提交。
  3. 解析返回的内容,提取 cookie 和其他信息,组装成 JSON 结构。
  4. 返回 JSON 结构。

异步问题解决方案

为了更好地处理异步操作,可以考虑使用 async/await 语法,它可以让异步代码看起来更像同步代码,从而提高可读性和维护性。此外,可以使用流行的库如 axios 来简化 HTTP 请求。

示例代码

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

const app = express();
app.use(express.json());

// 接收账号密码
app.post('/login', async (req, res) => {
    const { username, password } = req.body;

    try {
        // 读取一个网页,获取 token
        const response = await axios.get('https://example.com/token');
        const token = response.data.token;

        // 将 token 与账号密码一起提交
        const authResponse = await axios.post('https://example.com/auth', {
            username,
            password,
            token
        });

        // 解析返回的内容,提取 cookie 和其他信息
        const { cookie, otherInfo } = authResponse.headers;
        const jsonResponse = {
            cookie,
            ...otherInfo,
            username,
            password
        };

        // 返回 JSON 结构
        res.status(200).json(jsonResponse);
    } catch (error) {
        console.error(error);
        res.status(500).send('Internal Server Error');
    }
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

代码解释

  1. 接收账号密码:通过 express.json() 中间件解析请求体中的 JSON 数据。
  2. 读取一个网页,获取 token:使用 axios.get 发送 GET 请求获取 token。
  3. 将 token 与账号密码一起提交:使用 axios.post 发送 POST 请求,包含账号密码和 token。
  4. 解析返回的内容,提取 cookie 和其他信息:从响应头中提取 cookie 和其他信息,并组装成 JSON 结构。
  5. 返回 JSON 结构:使用 res.status(200).json(jsonResponse) 返回 JSON 数据。

总结

通过使用 async/awaitaxios,我们可以更轻松地处理异步操作,使代码更加简洁和易读。此外,选择合适的库(如 axios)可以显著减少开发时间和复杂性。希望这个示例能帮助你更好地理解和实现 Node.js 的 RESTful API。


用的requests和restify

用异步怎么蛋疼了。。不明白。。有async 啊。。。

路由的话,完全可以用express

async + coffeescript

q.js不错

      server.get( prefix , function(req, res){
        var connection = null;
        async.waterfall([
          getDbHandle,
          function(args, cb){
            connection = args.connection;

            cb(null, args);
          },
          User.isLogin,
          User.getById,
          User.filterOutput
        ], function (err, args) {
          releaseDbHandle(connection);
          if (err) {
            return res.send(403, err);
          }
          
          res.send(args.data);
        });

      });

我是这样写的,每个函数接收两个参数 args, cb

~~

async直接弄成global了。。

3q各位,我尝试下

在 Node.js 中处理 RESTful API 的异步操作确实可能比较棘手,特别是在需要进行多次网络请求时。这里可以使用 async/await 来简化异步代码,并使用一些流行的库来帮助完成任务。下面我将提供一个简单的示例来展示如何实现你的需求。

示例代码

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

const app = express();
app.use(express.json());

app.post('/login', async (req, res) => {
    const { username, password } = req.body;

    try {
        // Step 2: 获取 token
        const tokenResponse = await axios.get('https://example.com/token-endpoint');
        const token = tokenResponse.data.token;

        // 使用 token 和账号密码一起提交
        const loginResponse = await axios.post('https://example.com/login-endpoint', {
            username,
            password,
            token
        });

        // Step 3: 提取 cookie 和其他内容
        const cookie = loginResponse.headers['set-cookie'];
        const additionalContent = loginResponse.data.someField;

        // Step 4: 组装 JSON 结构并返回
        const jsonResponse = {
            cookie,
            additionalContent,
            // 其他需要返回的内容
        };

        res.status(200).json(jsonResponse);
    } catch (error) {
        console.error(error);
        res.status(500).send('Error occurred');
    }
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

解释

  1. 引入依赖:

    • axios 是一个流行的 HTTP 客户端,用于发送 HTTP 请求。
    • express 是一个轻量级的 web 框架,用于构建 RESTful API。
  2. 路由处理:

    • 使用 app.post('/login') 创建一个 POST 路由来处理登录请求。
  3. 异步处理:

    • 使用 async/await 简化了异步操作,使得代码更易读和维护。
  4. 数据处理:

    • 第一步是获取 token。
    • 第二步是使用 token 和用户提供的账号密码进行登录。
    • 第三步是提取响应中的 cookie 和其他内容。
    • 最后,将这些信息组合成 JSON 格式并返回给客户端。

这个示例展示了如何使用 async/await 来简化 Node.js 中的异步操作,使得代码逻辑更加清晰。希望这能帮助你更好地理解和实现你的需求。

回到顶部