node.js - 似乎无法确定错误在哪里
问题描述
我一直在开发一个平均堆栈应用程序,一切都很好,直到它突然开始出现。
SyntaxError: Unexpected token } in JSON at position 23
at JSON.parse (<anonymous>)
at parse (C:\Users\Mushood Hanif\Documents\Work\Task-Manager\api\node_modules\body-parser\lib\types\json.js:89:19)
at C:\Users\Mushood Hanif\Documents\Work\Task-Manager\api\node_modules\body-parser\lib\read.js:121:18
at invokeCallback (C:\Users\Mushood Hanif\Documents\Work\Task-Manager\api\node_modules\raw-body\index.js:224:16)
at done (C:\Users\Mushood Hanif\Documents\Work\Task-Manager\api\node_modules\raw-body\index.js:213:7)
at IncomingMessage.onEnd (C:\Users\Mushood Hanif\Documents\Work\Task-Manager\api\node_modules\raw-body\index.js:273:7)
at IncomingMessage.emit (events.js:333:22)
at endReadableNT (_stream_readable.js:1220:12)
at processTicksAndRejections (internal/process/task_queues.js:84:21)
这是api代码:
const express = require('express');
const app = express();
const { mongoose } = require('./db/mongoose');
// Load in the mongoose Models
const { list, task } = require('./db/models');
// Load Middleware
app.use(express.json());
// CORS Headers Middleware
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, x-access-token, x-refresh-token, _id");
res.header(
'Access-Control-Expose-Headers',
'x-access-token, x-refresh-token'
);
next();
});
// ROUTE HANDLERS
// LIST ROUTES
/**
* GET /lists
* Purpose: Get all Lists
*/
app.get('/lists', (req, res) => {
list.find({}).then((lists) => {
res.send(lists);
})
})
/**
* POST /lists
* Purpose: Create a List
*/
app.post('/lists', (req, res) => {
let title = req.body.title;
let newList = new list({
title
});
newList.save().then((listDoc) => {
res.send(listDoc);
})
});
/**
* PATCH /lists/:id
* Purpose: Update a List
*/
app.patch('/lists/:id', (req, res) => {
list.findOneAndUpdate({_id: req.params.id}, {
$set: req.body
}).then(() => {
res.sendStatus(200);
})
});
/**
* DELETE /lists/:id
* Purpose: Delete a List
*/
app.delete('/lists/:id', (req, res) => {
list.findByIdAndRemove({_id: req.params.id}).then((removedListDoc) => {
res.send(removedListDoc);
})
});
// TASK ROUTES
/**
* GET /lists/:listId/tasks
* Purpose: Get all Tasks in a Specific List
*/
app.get('/lists/:listId/tasks', (req, res) => {
task.find({
_listId: req.params.listId
}).then((tasks) => {
res.send(tasks);
})
});
/**
* GET /lists/:listId/tasks/:taskId
* Purpose: Get one Task from a Specific List
*/
app.get('/lists/:listId/tasks/:taskId', (req, res) => {
task.findOne({
_taskId: req.params.taskId,
_listId: req.params.listId
}).then((task) => {
res.send(task);
})
});
/**
* POST /lists/:listId/tasks
* Purpose: Create a New Task in a Specified List
*/
app.post('/lists/:listId/tasks', (req, res) => {
let newTask = new task({
title: req.body.title,
_listId: req.params.listId
});
newTask.save().then((newTaskDoc) => {
res.send(newTaskDoc);
})
});
/**
* PATCH /lists/:listId/tasks/:taskId
* Purpose: Update a Task from an Existing List
*/
app.patch('/lists/:listId/tasks/:taskId', (req, res) => {
task.findOneAndUpdate({
_id: req.params.taskId,
_listId: req.params.listId
}, {
$set: req.body
}).then(() => {
res.sendStatus(200);
})
});
/**
* DELETE /lists/:listId/tasks/:taskId
* Purpose: Delete a Task from an Existing List
*/
app.delete('/lists/:listId/tasks/:taskId', (req, res) => {
task.findOneAndRemove({
_id: req.params.taskId,
_listId: req.params.listId
}).then((removedTaskDoc) => {
res.sendStatus(removedTaskDoc);
})
});
app.listen(3000, () => {
console.log("Server Listening at Port 3000")
})
express 本身已经包含了body-parser,我正在使用它。我觉得这可能是错误的原因。我不明白错误来自哪里。我觉得这是我的 node.js api 某处的语法错误,但我似乎无法查明它。
解决方案
我发现了问题。patch 方法必须返回一个 json 对象,但我返回的是一个状态码。将 api 中的代码调整为如下所示:
/**
* PATCH /lists/:listId/tasks/:taskId
* Purpose: Update a Task from an Existing List
*/
app.patch('/lists/:listId/tasks/:taskId', (req, res) => {
task.findOneAndUpdate({
_id: req.params.taskId,
_listId: req.params.listId
}, {
$set: req.body
}).then(() => {
res.send({ message: "Task Updated Successfully" });
})
});
将解决问题。感谢您的帮助。
推荐阅读
- android - 如何从 NotificationChannel 获取通知(如果有)?
- python - 如何用 pandas 堆叠多列
- office-js - 从 Word JavaScript API 上下文对象加载选定的属性
- python - 如何在 Spark 中动态切片 Array 列?
- java - 如何让用户使用 java/sqllite 登录?
- javascript - 如何在 OpenLayers 的正确位置绘制特征
- python - 为什么我不能安装 Gi?
- asp.net-core - 从非交互式批处理以用户身份登录
- laravel - 如何使用 Laravel 编辑表单输入?
- java - 如何解决:无法解析 Json 数组。“不是原始数组”错误