Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试在rest客户端中发布数据时收到“无法发布”错误_Javascript_Node.js_Mongodb_Express - Fatal编程技术网

Javascript 尝试在rest客户端中发布数据时收到“无法发布”错误

Javascript 尝试在rest客户端中发布数据时收到“无法发布”错误,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,我在尝试向我创建的名为“医生”的数据库中发布新条目时收到此错误 My server.js的外观如下所示: const express = require('express'); const bodyParser = require('body-parser'); const mongoose = require('mongoose'); const app = express(); const router = express.Router(); const MongoClient = requ

我在尝试向我创建的名为“医生”的数据库中发布新条目时收到此错误

My 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');
});
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);
My user.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');
});
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更改为:

Content-Type: application/json

编辑-只需在中更正问题。收听

不能在express中发布/doctors意味着特定路线不存在


您可以显示更多的代码吗?您在哪个端口发布?

您在请求中设置了正确的内容类型吗

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');
});

否则,
req.body.doctorID
将返回
undefined

我刚刚成功地测试了这个。。问题似乎出在您的
Mongo
code

试试这个,如果它有效,您知道问题出在
Mongo
部分

这就是我发送请求的方式。。使用

这显示了我是如何接收请求的:

进一步阐述这个答案。。我通常以以下方式配置
Mongoose

文件夹结构:

'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/database/index.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');
});
然后在
/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,它引用的是错误的server.js。无论如何,谢谢你的帮助!希望此线程能帮助其他人。

这可能是因为您正在使用
应用程序的
“*”
。获取
下面的
应用程序。发布
。。如果将
app.post
移动到
app.get(“*”,…)
下面,会发生什么情况?不幸的是,情况完全一样。仍然是一个无法POST的错误。由于“*”位位于.listen调用之后,因此无论如何都不会命中。在.listen之后的任何内容都不会被点击。@kickergold你能提供你用来发送
POST
请求的代码吗?我怀疑这是因为他使用app.POST(),但他也设置了const router=express.router(),我正试图发布,并发送{“doctorID”:“6”,“password”:“password”}.localhost:8080是否返回html页面?是的,它确实返回that@kickergold哦,对不起,伙计,我没看到这个,你能试着在get路线中用/*换一下吗。把这条路线放在医生上面。试过了,完全一样的问题:/现在不知道是什么引起的!事实上,我刚刚测试了这个-这是不正确的。虽然在下面有一条路线
它仍然可以正常工作。我试过了,但不幸的是没有任何改变。还是一样的错误。不知道这是否意味着我的错误与server.js无关。测试这一点的最简单方法是更改app.post('/doctors'),并在其中添加res.send('post')。如果路由本身正在工作,您将得到“POST”作为响应。然后我们知道路线本身是正确的。如果这样做有效,那么问题就在你的医生身上。同样,医生仍然可以是常量而不是变量。试过之后,错误仍然是一样的。显然不是医生守则的问题。是的,我已经设定好了。遗憾的是,这不是问题所在。我已经对MongoDB部分进行了评论,并且能够看到正确的响应;无需对代码进行任何其他更改。你试过那样调试吗?你是说这部分吗?蒙古尔警察局mongodb://localhost:27017/votee'; mongoose.connect(mongoURL,函数(err){if(err){console.log('未连接到数据库:'+err);}else{console.log('成功连接到MongoDB');});我只是想通过评论MongoDB相关的代码来看看Express是否工作正常。我刚从POST函数返回了doctorID,它工作得非常好。这种更改对我来说不起作用。你认为这会指向什么?你实际上是如何发布数据的?你需要向我们展示你正在使用的代码,以实际发送POST请求。我正在使用发送请求。我上传了我如何将请求发送到我的答案的图片。我对它们进行了投票,不知道你在说什么。我的rep低,所以它不会出现:/2台相同的Express服务器?我认为这篇文章一点帮助都没有,应该以不可复制的方式关闭。