簡體   English   中英

嘗試在休息客戶端中發布數據時收到無法發布錯誤

[英]Receiving a Cannot POST error when attempting to post data in a rest client

我在嘗試將新條目發布到我創建的名為 Doctors 的數據庫中時收到此錯誤。

我的 server.js 看起來像這樣:

const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const app = express();
const router = express.Router();
const MongoClient = require('mongodb').MongoClient;
const client = new MongoClient(uri, { useNewUrlParser: true });
const morgan = require('morgan');
var Doctor = require('./www/js/user.js');
app.use(bodyParser.json());
app.use(express.static('www'));
app.use(morgan('dev'));
app.use(bodyParser.urlencoded({ 'extended': 'true' }));
app.use(bodyParser.json());
const mongoURL = 'mongodb://localhost:27017/app';
mongoose.connect(mongoURL, function (err) {
    if (err) {
        console.log('Not connected to the database:' + err);
    } else {
        console.log('Successfully connected to MongoDB');
    }
});

app.post('/doctors', function (req, res) {
    var doctor = new Doctor();
    doctor.doctorID = req.body.doctorID;
    doctor.password = req.body.password;
    doctor.save();
    res.send('doctor created');
});

// Configure port
const port = process.env.PORT || 8080;

// Listen to port
app.listen(port);
console.log(`Server is running on port: ${port}`);

app.get('*', function (req, res) {
    res.sendfile('./www/index.html');
});

我的 user.js,即我的架構,如下所示:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var bcrypt = require('bcrypt-nodejs');

var DoctorSchema = new Schema({
    doctorID: {type: Number, required: true, unique: true},
    password: {type: String, required: true}
});

//encrypt password
DoctorSchema.pre('save', function(next){
    var doctor = this;
    bcrypt.hash(doctor.password, null, null, function(err, hash){
        if (err) return next(err);
        doctor.password = hash;
        next();
    });
})

module.exports = mongoose.model('Doctor', DoctorSchema);

嘗試發布時,我收到此錯誤。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot POST /doctors</pre>
</body>
</html>

我不明白為什么我會收到這個特定的錯誤。 我可以毫無問題地從 /doctors 獲取數據,只是無法發布。

請將您的 server.js 更改為:

const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const app = express();
const MongoClient = require('mongodb').MongoClient;
const client = new MongoClient(uri, { useNewUrlParser: true });
const morgan = require('morgan');
var Doctor = require('./www/js/user.js');

app.use(bodyParser.json());
app.use(express.static('www'));
app.use(morgan('dev'));
app.use(bodyParser.urlencoded({ 'extended': 'true' }));
app.use(bodyParser.json());
const mongoURL = 'mongodb://localhost:27017/app';
mongoose.connect(mongoURL, function (err) {
    if (err) {
        console.log('Not connected to the database:' + err);
    } else {
        console.log('Successfully connected to MongoDB');
    }
});

app.post('/doctors', function (req, res) {
    var doctor = new Doctor();
    doctor.doctorID = req.body.doctorID;
    doctor.password = req.body.password;
    doctor.save();
    res.send('doctor created');
});

// Configure port
const port = process.env.PORT || 8080;

app.get('*', function (req, res) {
    res.sendfile('./www/index.html');
});

app.listen(port, function() {
  console.log(
    `Server listening on port ${port}!`
  );
});

編輯- 只是更正 .listen 中的問題

不能 POST /doctors in express 意味着特定的路由不存在。

你能展示更多的代碼,你在哪個端口發布?

您是否在請求中設置了正確的內容類型?

Content-Type: application/json

否則, req.body.doctorID將返回undefined

我剛剛成功測試了這個..看來問題出在你的Mongo代碼上..

試試這個,如果它有效,你就知道問題出在Mongo部分。

這就是我發送請求的方式..使用郵遞員

在此處輸入圖片說明

這顯示了我如何能夠接收請求:

在此處輸入圖片說明

const express = require('express');
const bodyParser = require('body-parser');
//const mongoose = require('mongoose');
const app = express();
const router = express.Router();
//const MongoClient = require('mongodb').MongoClient;
//const client = new MongoClient(uri, { useNewUrlParser: true });
//const morgan = require('morgan');
//var Doctor = require('./www/js/user.js');
app.use(bodyParser.json());
app.use(express.static('www'));
//app.use(morgan('dev'));
app.use(bodyParser.urlencoded({ 'extended': 'true' }));
app.use(bodyParser.json());
//const mongoURL = 'mongodb://localhost:27017/app';
/*
mongoose.connect(mongoURL, function (err) {
    if (err) {
        console.log('Not connected to the database:' + err);
    } else {
        console.log('Successfully connected to MongoDB');
    }
});
*/

app.post('/doctors', function (req, res) {
    console.log(req.body);
    res.status(200).send();
    /*
    var doctor = new Doctor();
    doctor.doctorID = req.body.doctorID;
    doctor.password = req.body.password;
    doctor.save();
    res.send('doctor created');
    */
});

// Configure port
const port = process.env.PORT || 8080;

// Listen to port
app.listen(port);
console.log(`Server is running on port: ${port}`);

app.get('*', function (req, res) {
    res.sendfile('./www/index.html');
});

為了擴展這個答案..我通常按以下方式配置Mongoose ..

文件夾結構:

root
 |- database
   |- index.js
 |- models
   |- someModel.js

/root/database/index.js

'use strict'
const mongoose = require('mongoose');
const mongoBaseUrl = `mongodb://server:27017/collection`;
const mongoDB      = mongoose.createConnection(mongoBaseUrl, { useNewUrlParser: true, promiseLibrary: global.Promise });

mongoose.set('useCreateIndex', true) // needed to suppress errors
module.exports = mongoDB;

然后在/root/models/someModel.js

'use strict'
const mongoose        = require('mongoose');
const mongoConnection = require('../database');

const modelName       = "SomeModel";
const collection      = "SomeCollection";
const databaseName    = "SomeDatabase";

const myDatabase      = mongoConnection.useDb(databaseName);


const SomeSchema = new mongoose.Schema({
  // Schema data here
})


module.exports = myDatabase.model(modelName, SomeSchema, collection) // (database, schema, collection)

然后在您的路線中使用它:

const Doctor = require('./models/someModel.js');
app.post('/route/', (req, res, next) => {
    var doctor = new Doctor();
    doctor.doctorID = req.body.doctorID;
    doctor.password = req.body.password;
    doctor.save();
    res.send('doctor created');
});

那種效果的東西。 希望這可以幫助。

事實證明,兩者都不是問題,我們有一個重復的 server.js,它引用了不正確的。 無論如何感謝您的幫助! 希望這個線程可以幫助其他人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM