【发布时间】:2019-07-13 03:53:32
【问题描述】:
我正在部署一个与我的本地主机一起工作的小应用程序,但现在在 Heroku 上,我遇到了 GET 和 POST 方法的一些问题。 我已经尝试调查了几个小时,但还没有找到正确的答案。
// 我的 index.js 文件
const express = require('express'),
app = express(),
path = require('path'),
bodyParser = require('body-parser'),
morgan = require('morgan'),
mongoose = require('mongoose');
let db = mongoose.connection,
port = 4000;
let server = app.listen(port, _server());
mongoose.connect(process.env.MONGOLAB_URI, { useNewUrlParser: true });
db.on('error', console.error.bind(console, 'Error de conexión: '));
db.once('open', function () {
console.log('Base de datos conectada correctamente');
});
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(morgan('dev'));
app.use(function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'Origin, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version, X-Response-Time, X-PINGOTHER, X-CSRF-Token,Authorization');
res.setHeader('Access-Control-Allow-Credentials', true);
next();
});
const tareas = require('./componentes/tareas/tareas.route');
app.use('/api', tareas);
module.exports = app;
function _server() {
console.log('Back-end corriendo en el puerto ' + port);
};
// 我的 tareas.route.js
'use strict';
const express = require('express');
const router = express.Router();
const tareas_api = require('./tareas.api');
router.param('tarea_id', function (req, res, next, tarea_id) {
req.body.tarea_id = tarea_id;
next();
});
router.route('/registrar_tarea')
.post(
function (req, res) {
tareas_api.registrar_tarea(req, res);
}
);
router.route('/listar_tareas')
.get(
function (req, res) {
tareas_api.listar_tareas(req, res);
}
)
router.route('/eliminar_tarea')
.post(
function (req, res) {
tareas_api.eliminar_tarea(req, res);
}
)
router.route('/buscar_tarea/:tarea_id')
.get(
function (req, res) {
tareas_api.buscartarea_tareaid(req, res);
}
)
router.route('/actualizar_tarea')
.post(
function (req, res) {
tareas_api.actualizar_tarea(req, res);
}
);
router.route('/cambiar_estado')
.post(
function (req, res) {
tareas_api.cambiar_estado(req, res);
}
);
module.exports = router;
//我的前端服务
let registrar_tarea = (pFecha, pNombre, pDescripcion, pPrioridad, pEncargado) => {
let request = $.ajax({
url: '/api/registrar_tarea',
method: 'POST',
data: {
fecha: pFecha,
nombre: pNombre,
descripcion: pDescripcion,
prioridad: pPrioridad,
encargado: pEncargado,
estado: "habilitado"
},
dataType: "json",
async: false,
contentType: 'application/x-www-form-urlencoded; charset=UTF-8'
});
request.done(function (msg) {
swal.fire({
type: 'success',
title: 'La tarea fue registrada',
text: `Gracias por registrar la tarea. Nombre: ${pNombre}`
}).then(function () {
window.location = "/public/listar_tareas.html";
});
});
request.fail(function (jqXHR, textStatus) {
swal.fire({
type: 'error',
title: 'La tarea no pudo ser registrada',
text: 'Ocurrió un error inesperado, por favor intente de nuevo'
});
});
};
let listar_tareas = () => {
let lista_tareas = [];
let request = $.ajax({
url: '/api/listar_tareas',
method: 'GET',
data: {
},
dataType: "json",
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
async : false
});
request.done(function (res) {
lista_tareas = res.tareas;
});
request.fail(function (jqXHR, textStatus) {
});
return lista_tareas;
};
这是结果:无法 POST /api/registrar_tarea
【问题讨论】:
-
你定义
registrar_tarea路由了吗?请分享tareas.route的代码。 -
嗨,Shubham,请查看原始帖子的更新。谢谢
-
您是否在同一台服务器上运行前端和后端?在 url 中,您应该提供完整的 url,例如
http://someURL//api/registrar_tarea而不是 API 的端点 -
在下面查看我的答案,我希望它会起作用。
-
非常感谢您对 Shubham 的跟进,我尝试了您提到的所有方法,但没有成功。在原始帖子中分享了指向 GitHub 存储库的链接,以防有人愿意仔细检查:)
标签: javascript node.js mongodb post heroku