node.js - 在 Express Web 应用程序中享受全面服务

标签 node.js mongodb express

我必须实现一个 express web 应用程序才能将 Rest 服务与 mongodb 一起使用。

我的DBConfig.js文件如下所示,其中包括我的数据库架构,

var Mongoose = require("mongoose");
const Schema = Mongoose.Schema;

const UserSchema = new Schema({
name : {
    type: String,
    require: true
},
address : {
    type: String,
    require: false
},
password: {
    type: String,
    require: true
}
});

Mongoose.model('User', UserSchema);
Mongoose.connect("mongodb://localhost:27017/demo", function (err) {
if (err) {
    console.log(err);
    process.exit(-1);
}
console.log("Connected");
});

module.exports = Mongoose;

所有相关方法都在我的 Controller.js 文件中实现

var Mongoose = require("../DBSchema/DBConfig");
var UserSchema = Mongoose.model('User');


var Controller = function() {
this.insertUser = function (data) {
    return new Promise(function(resolve, reject) {
        var User = new UserSchema({
            name: data.name,
            address: data.address,
            password: data.password
        });

        User.save().then(function () {
            resolve({status: 200, message: "User inserted successfully"})
        }).catch(function (err) {
            reject({status: 500, message: "Error:- " + err})
        });
    });
}

this.getAll = function () {
    return new Promise(function (resolve, reject) {
        UserSchema.find().exec().then(function (data) {
            resolve({status: 200, Userdata: data})
        }).catch(function (err) {
            resolve({status: 500, message : "No data available"})
        })
    })
}

this.getuser = function (id) {
    return new Promise(function (resolve, reject) {
        UserSchema.find({_id: id}).exec().then(function (data) {
            resolve({status: 200, userSearched: data});
        }).catch(function (err) {
            reject({status: 404, message: "User NOT FOUND"});
        })
    })
}
this.updateUser = function (id, data) {
    return new Promise(function (resolve, reject) {
        UserSchema.update({_id: id}, data).then(function (data) {
            resolve({status: 200, message: "User updated successfully"})
        }).catch(function (err) {
            reject({status: 500, message: "Error:- " + err})

        })
    })
}

this.remove = function (id) {
    return new Promise(function (resolve, reject) {
        UserSchema.remove({_id: id}).then(function () {
            resolve({status: 200, message: "Successfully deleted"})
        }).catch(function (err) {
            resolve({status: 500, message: "Error : "+err})
        })
    })
}
}

module.exports = new Controller();

现在我必须调用我的休息服务,我想知道如何使用 Controller 中的这些方法来访问数据。

我正在使用 postman 查看我的数据。 输出应该是

{
"data": [
    {
        "_id": "5cf724a58c9b061ba062a28c",
        "name": "name1",
        "address": "adress1",
        "password": "password1",
        "__v": 0
    }
]
}

最佳答案

您所需要的只是在 URL 中定义路由来访问相关方法,例如,我在名为 UserController 的文件夹下创建一个名为 User.Routes.js 的文件,您也可以添加您的 Controller.js 文件以按顺序排列以获得清晰的想法。并且假设您将 DBConfig.js 文件添加到名为 DBSchema 的文件夹下,这使您能够进行良好的代码练习。

var Express = require('express');
var router = Express.Router();
var Controller = require('./Controller')

router.get('/',function (req,res) {
Controller.getAll().then(function (data) {
    res.status(data.status).send({data:data.Userdata})
});
});

router.get('/:id',function (req,res) {
Controller.getuser(req.params.id).then(function (data) {
    res.status(data.status).send({data:data.userSearched});
});
});

router.post('/',function(req,res){
Controller.insertUser(req.body).then(function (data) {
    res.status(data.status).send({message: data.message});
}).catch(function (err) {
    res.status(err.status).send({message: err.message});
});
});

router.put('/:id',function (req,res) {
Controller.updateUser(req.params.id,req.body).then(function (data) {
    res.status(data.status).send({message: data.message});
});
});

router.delete('/:id', function (req,res) {
Controller.remove(req.params.id).then(function (data) {
    res.status(data.status).send({message: data.message});
});
});

module.exports = router;

现在您需要通过 postman 使用 User.Routes.js 中的方法。为此,您需要提供要访问的网址名称。例如,我创建 Routes.js 文件

const Express = require("express");

var Routes = Express.Router();
var UserRoute = require('./UserController/User.Route');

Routes.use('/user/', UserRoute);
module.exports = Routes;

像这样,如果您想查看架构中的数据,您必须添加类似 -"http://localhost:8083/user "的 url

并且您的app.js文件需要创建的路由文件,您可以这样做,

const Express = require("express");
const app = Express();
const BodyParser = require("body-parser");
const Routes = require("./Routes");

app.use(BodyParser.json());
app.use("/", Routes);

app.listen(8083, "localhost", function(err) {
if (err) {
console.log(err);
process.exit(-1);
}
console.log("Server listening on port 8083");
});

现在使用 postman ,您可以通过在 URL 中提供用户 ID 来添加用户、更新和删除特定用户,例如 -“http://localhost:8083/user/5cf724a58c9b061ba062a28c

关于node.js - 在 Express Web 应用程序中享受全面服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56453493/

相关文章:

node.js - NodeJS函数检查端口是否正在运行?

node.js - 在 docker 容器中自动获取主机名的方法

javascript - MongoDB 填充聚合管道分页中的缺失日期

node.js - 类型错误 : require(. ..) 不是 SendGrid NodeJS 中的函数

javascript - SQL Server 实时推送通知到 Node.JS

node.js - AWS Codedeploy 错误 : scripts/applicationstart. sh 不可执行。试图使其可执行

.net - CQRS、事件溯源和 NoSQL 数据库

java - 如何使用 Mongo Java 驱动程序从集合中检索随机文档

angularjs - 将 Angular 与 Express-Handlebars 结合用于 Node.js 应用程序

node.js - 我应该使用 Sails.js 和 Stormpath 来整合 session 管理吗?