Javascript 尝试在rest客户端中发布数据时收到“无法发布”错误
我在尝试向我创建的名为“医生”的数据库中发布新条目时收到此错误 My server.js的外观如下所示: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
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服务器?我认为这篇文章一点帮助都没有,应该以不可复制的方式关闭。