【问题标题】:How do i send a success status code to the front end using node.js?如何使用 node.js 向前端发送成功状态代码?
【发布时间】:2020-12-17 05:02:27
【问题描述】:

我最近开始使用node.js作为我的后端并且我已经成功地将数据发布到数据库中,我现在面临的问题是告诉前端数据已经成功保存。下面是我的用户路线,所有我尝试过的东西都被注释掉了。

import { Router } from 'express';
import { IUser } from '../models/user.model';
const User = require('../models/user.model');
// import bcrypt from 'bcrypt';

const bcrypt = require('bcrypt');
const bodyParser = require('body-parser');

// create application/json parser
var jsonParser = bodyParser.json()

// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })

const userRouter = Router();

userRouter.get('/', (req, res) => {
    return res.json('This is the user route');
})

userRouter.post("/register", (req, res: any, next) => {


    const user: IUser = new User({

        email: res.email,
        firstName: res.firstName,
        lastName: res.lastName,
        password: res.password,
        displayName: res.displayName,
        cellNumber: res.cellNumber,
    });

    user.save()
        .then((result: any) => {

            res.status(201).json({
                message: 'Successfully created a new user!',
                result: result
            });
            // res.sendCode(201);
            // console.log(res);
            // res.status(201).send("User has been successfully created");
            //return 'User has been successfully created';

            // return Object({ message: "User has been successfully created" });

            // return res.status(201).send({
            //     message: "User has been successfully created",
            //     statusCode: 201
            // })

            // return res;

        })
        .catch((err: any) => {
            res.status(500).json({
                error: err
            })
        })


    // bcrypt.hash(req.body.password, 10)
    //     .then((hash: string) => {

    //         const user = new User({

    //             email: req.body.email,
    //             firstName: req.body.firstName,
    //             lastName: req.body.lastName,
    //             password: hash,
    //             displayName: req.body.displayName,
    //             cellNumber: req.body.cellNumber,
    //         });

    //         user.save()
    //             .then((res: any) => {

    //                 res.status(201).json({
    //                     message: 'Successfully created a new user!',
    //                     result: res
    //                 });

    //             })
    //             .catch((err: any) => {
    //                 debugger;
    //                 res.status(500).json({
    //                     error: Error
    //                 })
    //             })
    //     })

})

export default userRouter;

然后我将其导出到下面的 server.ts 文件

import express = require('express');
//import cors from 'cors';
const cors = require('cors');
const bodyParser = require('body-parser')
import { Router } from 'express';
import mongoose from "mongoose";
import "dotenv/config"

//routes
import userRouter from './routes/user.routes';

//Create a new express instance
const app: express.Application = express();

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

    res.send('Hello World');

});

// //get router
// var router = express.Router();

//Database
mongoose.connect(`${process.env.MONGO_URI}`,
    {
        useNewUrlParser: true,
        useUnifiedTopology: true,
        useCreateIndex: true,
    })
    .then(() => {
        console.log("Connected to MongoDB")
    })
    .catch(() => {
        console.log("Connection to Database has failed")
    })


var corsOptions = {
    origin: '*',
    credentials: true,
    methods: '*'
};



const routes = Router();

export default routes;

app.use(routes);

app.use(bodyParser.urlencoded({ extended: false }));

app.use(cors(corsOptions));

app.use("/user", userRouter);



routes.use('/user', userRouter);
routes.use(cors(corsOptions));

//use cors middleware
// router.use(cors(options));

app.listen(3000, function () {

    console.log('App is listening on port 3000!');

})

奇怪的是,当我设置断点并分析 res 文件时,我可以看到我会从前端发布的数据。但是前端得到的是 500 状态代码,而不是我想要发送的 201,即使它直接通过了该代码。我已经用谷歌搜索了我的键盘键三天了。所以我现在很茫然。

所有最新更改都可以在下面的 GitLab 存储库中找到 https://gitlab.com/ShanahJr/SuperiorBallers

【问题讨论】:

    标签: javascript node.js typescript express http-status-code-500


    【解决方案1】:

    您只需要使用express 提供的res 变量即可。 示例 -

    module.exports.updateData = async (req, res, next) => {
        try {
            const data = await Editor.edit(req.body.query);
    
            res.status(200).json({ "status": true, "result": 'Edit successful!' })
    
        } catch (error) {
            console.log(error)
            res.status(200).json({ "status": false, "result": "Request Failed!" })
        }
    }
    

    此声明 - res.status(200).json({ "status": true, "result": 'Edit successful!' })

    现在,express 还建议使用 res.sendStatus(200) 而不是 res.status(200)

    您可以查找状态码here

    【讨论】:

    • 我仍然面临同样的问题
    • 您在 try-catch 块中遇到的错误是什么?
    • 内部服务器错误。我没有得到更多信息
    • 很明显,您收到了 500 内部服务器错误。这是因为您的代码失败并且您在 catch 块中添加了以下代码。 ``` .catch((err: any) => { res.status(500).json({ error: err }) })``` 所以你可以在前端应用程序中添加一个错误拦截器来处理您的服务器正在发送的此类错误代码。虽然这里的错误是因为您的代码失败
    • 你能在你的catch块中记录错误并分享吗?
    【解决方案2】:

    使用res.status(201).send()res.status().json 通常会被 http 规则阻止,尤其是在您激活 https 时

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-04
      • 2021-09-24
      • 2012-12-04
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多