【问题标题】:Express application with two API(routes) that have two responses 1)error 2) success具有两个 API(路由)的 Express 应用程序有两个响应 1)错误 2)成功
【发布时间】:2019-12-08 12:07:13
【问题描述】:

这是关于使用 express 的 REST api 的问题。 完成在端口 3000 上运行并连接到数据库分配的 Express 应用程序。 数据库应该有一个包含以下用户详细信息的用户集合。

a) 用户 ID - "user1", 名字 - “Akshay”, 姓氏 - “库马尔”, 电子邮件 - “khiladi@gmail.com”

b) 用户 ID - “用户 2” 名字 - “Rajnikanth”, 姓 - ””, 电子邮件 - “boss@rajnikanth.com”

上面的数据库部分不是必需的(我发布了整个问题以防万一)

应用程序应具有以下 api - /users - 返回数据库中所有用户的 JSON /users/:userId - 根据传递的 userId 返回单个用户的对象

在给定的应用程序中编辑以下文件 - 响应.js app.js

并通过以下两种响应使其成为功能齐全的 REST API - a) 错误响应 - {'isError':true,'status': 500,'errorMessage':'一些错误信息',successMessage:null} b) 成功响应—— {'isError':false,'status': 200,'errorMessage':null,successMessage:'一些结果'}

注意:您不需要使用 app.listen()。这将由系统处理。

*/

我已经尝试过这个解决方案:

   app.get('/users', function(req, res, err) {

    UserModel.find(function(err, result){
         if(err) {
            let apiResponse = response.generateResponse(true, 500, "Some 
     error message", null);
            res.send(apiResponse);
        } else {
            let apiResponse = response.generateResponse(false, 200, "Some 
    result", result);
            res.send(apiResponse);
        }

      });
  });

  app.get('/users/:userId', function(req, res, err){

     BlogModel.findOne({ 'blogId': req.params.userId }, (err, result) => {

        if (err) {
            let apiResponse = response.generateResponse(true, 500, "Some error message", null);
            res.send(apiResponse);

        }  else {
            let apiResponse = response.generateResponse(false, 200, "Some result", result);
            res.send(apiResponse);
        }
    });
});

但它给出了一些逻辑错误信息。 我必须在线提交代码,在那里我回答我的作业,他们的网站编译器只会告诉你是否存在 sytnax 错误或逻辑错误。

正如我之前提到的,我必须在网站上提交它,所以不能真正得到结果,但是当我在我的 Visual Studio 代码上运行它时,这段代码可以正常工作。 我认为有一些我无法弄清楚的逻辑错误。

所有 .JS 文件:

app.js

const express = require('express');
const app = express();
const mongoose = require('mongoose');
const UserModel = require('./User.js');

let db = mongoose.connect('mongodb://testuser:password123@ds149252.mlab.com:49252/assignment', { useMongoClient: true });
const responseLib = require('./responseLib');

app.get('/users', function(req, res, err) {

    UserModel.find(function(err, result){
         if(err) {
            let apiResponse = response.generateResponse(true, 500, "Some error message", null);
            res.send(apiResponse);
        } else {
            let apiResponse = response.generateResponse(false, 200, "Some result", result);
            res.send(apiResponse);
        }

    });
});

app.get('/users/:userId', function(req, res, err){

     BlogModel.findOne({ 'blogId': req.params.userId }, (err, result) => {

        if (err) {
            let apiResponse = response.generateResponse(true, 500, "Some error message", null);
            res.send(apiResponse);

        }  else {
            let apiResponse = response.generateResponse(false, 200, "Some result", result);
            res.send(apiResponse);
        }
    });
});



module.exports = app;

Users.js

// importing mongoose module
// importing mongoose module
const mongoose = require('mongoose')
// import schema 
const Schema = mongoose.Schema;

let userSchema = new Schema(
    {
        userId: {
            type: String,
            unique: true
        },
        firstName: {
            type: String,
            default: ''
        },
        lastName: {
            type: String,
            default: ''
        },
        email: {
            type: String,
            default: ''
        }
    }
)

mongoose.model('User', userSchema);

module.exports = mongoose.model('User', userSchema)

responseLib.js

let generateResponse = (isError,status,errorMessage,successMessage) =>{

let response = {

    isError : isError,
    status : status,
    errorMessage : errorMessage,
    successMessage : successMessage
}
return response

};// end generate response. 

module.exports = {generateResponse:generateResponse}

【问题讨论】:

    标签: javascript mongodb rest express mongoose


    【解决方案1】:

    在您的/users/:userId 路由代码中,它应该是UserModel.findOne()。此外,在您的 app.get 路由函数中声明 err 也是没有意义的,因为您稍后已经在回调函数中将其声明为 (err, result)

      app.get('/users', (req, res) => {
    
        UserModel.find((err, result) => {
            if (err) {
                res.send(err);
            } else if (result == undefined || result == null || result == '') {
                res.send("No User Data Found");
            } else {
                res.send(result);
            }
        });
     });
    
     app.get('/users/:userId', (req, res) => {
        UserModel.findOne({ 'userId': req.params.userId }, (err, result) => {
            if (err) {
                res.send(err);
            } else if (result == undefined || result == null || result == '') {
                res.send("No Such User Found");
            } else {
                res.send(result);
            }
        });
     });`
    

    【讨论】:

      【解决方案2】:

      在不知道什么是“逻辑错误”的情况下,很难准确地说出问题所在。但我的猜测是您没有在 HTTP 响应中设置状态。在 HTTP 响应中,您有标头和正文,您生成的响应是正文。但是您没有在标题中设置状态。

      因此您必须执行res.status(200)res.status(500) 才能在标题中设置状态。您应该在res.send 之前执行此操作,因为res.send 是返回响应的操作。在res.status 发送之前,您正在准备回复。

      您可以查看documentation here

      【讨论】:

      • 所以我在 res.send 之后添加 res.status ??关于逻辑错误,我只想知道它是否符合问题的逻辑。(我是否在做被问到的事情?)。谢谢
      • 不,你应该这样做。 Res.send 将发送您的回复,因此如果您在之后发送,它将无效。根据您的描述,我认为使用状态标题是正确的。看来您的方向是正确的。
      • 所以我尝试添加 res.status 但它说逻辑不正确并给了我一些提示。提示:以数据为参数,从库函数中返回对象。
      【解决方案3】:

      直接复制粘贴进行分配。这是一个有效的代码。

      app.js

      const express = require('express');
      const app = express();
      const mongoose = require('mongoose');
      const UserModel = require('./User.js');
      
      let db = mongoose.connect('mongodb://testuser:password123@ds149252.mlab.com:49252/assignment', { useMongoClient: true });
      const response = require('./responseLib');
      app.get('/users', (req, res) => {
      
          UserModel.find((err, result) => {
              if (err) {
                  let apiResponse = response.generateResponse(true, 500, "Some error message", null);
                  res.send(apiResponse);
              } else if (result ===undefined || result ===null || result ==='') {
                  let apiResponse = response.generateResponse(true, 500, "Some error message", null);
                  res.send(apiResponse);
              } else {
                   let apiResponse = response.generateResponse(false, 200, null, 'Some result');
                  res.send(apiResponse);
              }
          });
       });
      
       app.get('/users/:userId', (req, res) => {
          UserModel.findOne({ 'userId': req.params.userId }, (err, result) => {
              if (err) {
                  let apiResponse = response.generateResponse(true, 500, "Some error message", null);
                  res.send(apiResponse);
              } else if (result ===undefined || result ===null || result ==='') {
                 let apiResponse = response.generateResponse(true, 500, "Some error message", null);
                  res.send(apiResponse);
              } else {
                   let apiResponse = response.generateResponse(false, 200, null, 'Some result');
                  res.send(apiResponse);
              }
          });
       });
      
      
      
      module.exports = app;
      

      responseLib.js

      let generateResponse = (isError,status,errorMessage,successMessage) =>{
         let response = {
      
          isError : isError,
          status : status,
          errorMessage : errorMessage,
          successMessage : successMessage
      };
      return response; 
      
      
      };// end generate response. 
      
      module.exports = {generateResponse:generateResponse};
      

      user.js

      // importing mongoose module
      const mongoose = require('mongoose');
      // import schema 
      const Schema = mongoose.Schema;
      
      let userSchema = new Schema(
          {
              userId: {
                  type: String,
                  unique: true
              },
              firstName: {
                  type: String,
                  default: ''
              },
              lastName: {
                  type: String,
                  default: ''
              },
              email: {
                  type: String,
                  default: ''
              }
          }
      );
      mongoose.model('User', userSchema);
      
      module.exports = mongoose.model('User', userSchema);
      

      直接复制粘贴进行分配。这是一个有效的代码。

      【讨论】:

        猜你喜欢
        • 2023-02-17
        • 1970-01-01
        • 1970-01-01
        • 2013-04-22
        • 1970-01-01
        • 2022-01-21
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        相关资源
        最近更新 更多