将请求作为获取请求nodejs

发布于 2025-01-20 07:51:04 字数 4769 浏览 1 评论 0原文

除了 PUT 请求之外的所有代码都可以正常工作。发送请求时,该请求将作为 GET 请求工作。我找不到关于这个问题的任何解决方案。 stackoverflow中有很多关于PUT请求在ajaxjqueryGET请求的问题等等。我无法获得任何在nodejs中应用的信息。

控制台:

GET /update-book?bookId=12345&************ 404 5.883 ms - 1223

app.js:

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
const bodyParser = require('body-parser');

const movieRouter = require('./routes/movie-router');
const bookRouter = require('./routes/book-router');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', movieRouter);
app.use('/', bookRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

book-router:

const router = require('express').Router();
ObjectID = require('mongodb').ObjectId;
const collection = require('../database-connection');

router.get('/book', async function(req, res, next) {
    res.render('book');
})

router.get('/find-book', async function(req, res, next) {
    await collection.findOne({bookId: req.query.bookId})
            .then(resp => {
                console.log(resp);
                return resp
            })
            .then(data => {
                console.log(data);
                res.render('view-book', {
                    bookId: data.bookId,
                    book_name: data.book_name,
                    book_author: data.book_author,
                    book_publisher: data.book_publisher
                });
            })
})

router.post('/add-book', async function(req, res, next) {
    await collection.insertOne({
        bookId: req.body.bookId,
        book_name: req.body.book_name,
        book_author: req.body.book_author,
        book_publisher: req.body.book_publisher
    })

    console.log(req.body);
    res.send('posted');
})

router.put('/update-book', async function(req, res, next) {
    await collection.updateOne({
        bookId: req.query.bookId
    }, {
        $set: req.body
    })
})

module.exports = router;

book.ejs:

<!DOCTYPE html>
<html>
<body>
<form action="/add-book" method="POST">
    <label>Book ID:</label>
    <input type="text" name="bookId" /><br>

    <label>Book Name:</label>
    <input type="text"  name="book_name" /><br>

    <label>Author:</label>
    <input type="text" name="book_author" /><br>

    <label>Publisher:</label>
    <input type="text" name="book_publisher" /><br>

    <button type="submit">ADD</button>
</form>

<br><br><br><br>

<form action="/find-book" method="GET">
    <label>Book ID Name:</label>
    <input type="text"  name="bookId" /><br>
    <button type="submit">FIND</button>
</form>

<br><br><br><br>

<form action="/update-book" method="PUT">
    <label>Book ID:</label>
    <input type="text" name="bookId" /><br>

    <label>Book Name:</label>
    <input type="text"  name="book_name" /><br>

    <label>Author:</label>
    <input type="text" name="book_author" /><br>

    <label>Publisher:</label>
    <input type="text" name="book_publisher" /><br>

    <button type="submit">UPDATE</button>
</form>

</body>
</html>

view-book.ejs :

<!DOCTYPE html>
<html>
<body>
<h1>Book ID: <%= bookId %></h1>
<h1>Book Name: <%= book_name %></h1>
<h1>Book Author: <%= book_author %></h1>
<h1>Publisher: <%= book_publisher %></h1>

</body>
</html>

All code except PUT request works fine. When the request is sent the request works as GET request. I could not find any solution regarding this problem. There are many question in stackoverflow about PUT request working as GET request in ajax, jquery etc. I could not get any information to apply in nodejs.

console:

GET /update-book?bookId=12345&************ 404 5.883 ms - 1223

app.js:

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
const bodyParser = require('body-parser');

const movieRouter = require('./routes/movie-router');
const bookRouter = require('./routes/book-router');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', movieRouter);
app.use('/', bookRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

book-router:

const router = require('express').Router();
ObjectID = require('mongodb').ObjectId;
const collection = require('../database-connection');

router.get('/book', async function(req, res, next) {
    res.render('book');
})

router.get('/find-book', async function(req, res, next) {
    await collection.findOne({bookId: req.query.bookId})
            .then(resp => {
                console.log(resp);
                return resp
            })
            .then(data => {
                console.log(data);
                res.render('view-book', {
                    bookId: data.bookId,
                    book_name: data.book_name,
                    book_author: data.book_author,
                    book_publisher: data.book_publisher
                });
            })
})

router.post('/add-book', async function(req, res, next) {
    await collection.insertOne({
        bookId: req.body.bookId,
        book_name: req.body.book_name,
        book_author: req.body.book_author,
        book_publisher: req.body.book_publisher
    })

    console.log(req.body);
    res.send('posted');
})

router.put('/update-book', async function(req, res, next) {
    await collection.updateOne({
        bookId: req.query.bookId
    }, {
        $set: req.body
    })
})

module.exports = router;

book.ejs:

<!DOCTYPE html>
<html>
<body>
<form action="/add-book" method="POST">
    <label>Book ID:</label>
    <input type="text" name="bookId" /><br>

    <label>Book Name:</label>
    <input type="text"  name="book_name" /><br>

    <label>Author:</label>
    <input type="text" name="book_author" /><br>

    <label>Publisher:</label>
    <input type="text" name="book_publisher" /><br>

    <button type="submit">ADD</button>
</form>

<br><br><br><br>

<form action="/find-book" method="GET">
    <label>Book ID Name:</label>
    <input type="text"  name="bookId" /><br>
    <button type="submit">FIND</button>
</form>

<br><br><br><br>

<form action="/update-book" method="PUT">
    <label>Book ID:</label>
    <input type="text" name="bookId" /><br>

    <label>Book Name:</label>
    <input type="text"  name="book_name" /><br>

    <label>Author:</label>
    <input type="text" name="book_author" /><br>

    <label>Publisher:</label>
    <input type="text" name="book_publisher" /><br>

    <button type="submit">UPDATE</button>
</form>

</body>
</html>

view-book.ejs:

<!DOCTYPE html>
<html>
<body>
<h1>Book ID: <%= bookId %></h1>
<h1>Book Name: <%= book_name %></h1>
<h1>Book Author: <%= book_author %></h1>
<h1>Publisher: <%= book_publisher %></h1>

</body>
</html>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

地狱即天堂 2025-01-27 07:51:04

您应该使用方法覆盖来更改 get 请求以将

  1. npm i method-override
  2. 在 app.js 中放置这些:
const methodOverride = require("method-override")
app.use(methodOverride('_method'))
<form action="/update-book?_method=PUT" method="POST">

如果您有一个 deleteRouter 您也将这样做

更多信息请参考这些

https://levelup.gitconnected.com/using-the-method-override-express-middleware-3853a115a5ca

You should use method override for changing get request to put

  1. npm i method-override
  2. In app.js put these:
const methodOverride = require("method-override")
app.use(methodOverride('_method'))
<form action="/update-book?_method=PUT" method="POST">

If you have a deleteRouter you will also do like this

For more information do refer to these

https://levelup.gitconnected.com/using-the-method-override-express-middleware-3853a115a5ca

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文