Экспресс приложение с двумя API (маршрутами) с двумя ответами 1) ошибка 2) успех - PullRequest
0 голосов
/ 04 апреля 2019

Это вопрос относительно REST API с использованием Express. Заполните приложение Express, которое работает на порту 3000 и подключается к назначению базы данных. База данных должна иметь коллекцию пользователей, которая содержит следующие данные пользователя.

а) userId - "user1", firstName - «Акшай», lastName - "Кумар", электронная почта - "khiladi@gmail.com"

б) userId - "user2" firstName - "Раджникант", Фамилия - "", электронная почта - "boss@rajnikanth.com"

ВЫШЕ ЧАСТЬ БАЗЫ ДАННЫХ НЕ НУЖНА (я на всякий случай разместил весь вопрос)

Приложение должно иметь следующий API - / users - возвращает JSON всех пользователей в БД / users /: userId - возвращает объект одного пользователя на основе переданного userId

Редактировать следующие файлы в данном приложении - response.js app.js

И сделайте его полностью функциональным REST API со следующими двумя типами ответов: а) Ошибка ответа - {'IsError': true, 'status' ': 500,' errorMessage ':'’ Some error message' ', successMessage: null} б) Успешный ответ - {‘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}

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

в вашем /users/:userId коде маршрутов, это должно быть UserModel.findOne().Также нет смысла объявлять err в функции вашего маршрута app.get, так как вы уже объявили его в функции обратного вызова позже как (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);
        }
    });
 });`
0 голосов
/ 04 апреля 2019

Немного трудно точно сказать, в чем проблема, не зная, что такое «логическая ошибка». Но я предполагаю, что вы не устанавливаете статус в ответе HTTP. В ответе HTTP у вас есть Заголовки и Тело, сгенерированный ответ - это тело. Но вы не устанавливаете статус в заголовках.

Таким образом, вы должны сделать res.status(200) или res.status(500), чтобы установить статус в заголовке. Вы должны сделать это до res.send, потому что res.send - это действие, которое возвращает ответ. Пока res.status вы готовите свой ответ перед отправкой.

Вы можете проверить документацию здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...