- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我一直在学习如何构建全栈 MEAN 应用程序的教程,到目前为止一切都运行良好(注册、登录和身份验证。)
我现在尝试对博客页面执行发布请求,但收到以下错误:
<pre>Cannot POST /blogs/newBlog</pre>
到目前为止,我所做的只是创建一个架构、一条路由,然后对 index.js 进行相关更改。下面提供的模式文件是教程作者在其存储库中提供的模式文件(与其他两个文件不同,它是完整的形式。)问题仍然存在,因此我不认为这是问题所在。
博客架构:
/* ===================
Import Node Modules
=================== */
const mongoose = require('mongoose'); // Node Tool for MongoDB
mongoose.Promise = global.Promise; // Configure Mongoose Promises
const Schema = mongoose.Schema; // Import Schema from Mongoose
// Validate Function to check blog title length
let titleLengthChecker = (title) => {
// Check if blog title exists
if (!title) {
return false; // Return error
} else {
// Check the length of title
if (title.length < 5 || title.length > 50) {
return false; // Return error if not within proper length
} else {
return true; // Return as valid title
}
}
};
// Validate Function to check if valid title format
let alphaNumericTitleChecker = (title) => {
// Check if title exists
if (!title) {
return false; // Return error
} else {
// Regular expression to test for a valid title
const regExp = new RegExp(/^[a-zA-Z0-9 ]+$/);
return regExp.test(title); // Return regular expression test results (true or false)
}
};
// Array of Title Validators
const titleValidators = [
// First Title Validator
{
validator: titleLengthChecker,
message: 'Title must be more than 5 characters but no more than 50'
},
// Second Title Validator
{
validator: alphaNumericTitleChecker,
message: 'Title must be alphanumeric'
}
];
// Validate Function to check body length
let bodyLengthChecker = (body) => {
// Check if body exists
if (!body) {
return false; // Return error
} else {
// Check length of body
if (body.length < 5 || body.length > 500) {
return false; // Return error if does not meet length requirement
} else {
return true; // Return as valid body
}
}
};
// Array of Body validators
const bodyValidators = [
// First Body validator
{
validator: bodyLengthChecker,
message: 'Body must be more than 5 characters but no more than 500.'
}
];
// Validate Function to check comment length
let commentLengthChecker = (comment) => {
// Check if comment exists
if (!comment[0]) {
return false; // Return error
} else {
// Check comment length
if (comment[0].length < 1 || comment[0].length > 200) {
return false; // Return error if comment length requirement is not met
} else {
return true; // Return comment as valid
}
}
};
// Array of Comment validators
const commentValidators = [
// First comment validator
{
validator: commentLengthChecker,
message: 'Comments may not exceed 200 characters.'
}
];
// Blog Model Definition
const blogSchema = new Schema({
title: { type: String, required: true, validate: titleValidators },
body: { type: String, required: true, validate: bodyValidators },
createdBy: { type: String },
createdAt: { type: Date, default: Date.now() },
likes: { type: Number, default: 0 },
likedBy: { type: Array },
dislikes: { type: Number, default: 0 },
dislikedBy: { type: Array },
comments: [{
comment: { type: String, validate: commentValidators },
commentator: { type: String }
}]
});
// Export Module/Schema
module.exports = mongoose.model('Blog', blogSchema);
routes/blogs.js
const User = require('../models/user'); // Import User Model Schema
const jwt = require('jsonwebtoken');
const config = require('../config/database');
module.exports = (router) => {
router.post('/newBlog', (req, res) => { // TODO: change URL
res.send('test worked');
});
return router; // Return router object to main index.js
}
index.js
/* ===================
Import Node Modules
=================== */
const env = require('./env');
const express = require('express');
const app = express();
const router = express.Router();
const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
const config = require('./config/database');
const path = require('path');
const authentication = require('./routes/authentication')(router);
const blogs = require('./routes/blogs')(router);
const bodyParser = require('body-parser');
const cors = require('cors');
const port = process.env.PORT || 8080;
// Database Connection
mongoose.connect(config.uri, {
useMongoClient: true,
}, (err) => {
// Check if database was able to connect
if (err) {
console.log('Could NOT connect to database: ', err);
message
} else {
console.log('Connected to ' + config.db);
}
});
// Middleware
app.use(cors({ origin: 'http://localhost:4200' }));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(express.static(__dirname + '/public'));
app.use('/authentication', authentication);
app.use('/blogs', blogs);
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname + '/public/index.html'));
});
// Start Server: Listen on port 8080
app.listen(port, () => {
console.log('Listening on port ' + port + ' in ' + process.env.NODE_ENV + ' mode');
});
我非常喜欢这门类(class),并且非常感谢任何帮助(即使只是排除可能的原因。)
完整错误:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot POST /blogs/newBlog</pre>
</body>
</html>
最佳答案
您的问题与:
app.use('/blogs', blogs);
blogs
函数应该是一个采用 (req, res)
的函数,但它实际上采用 (router)
。
您有两个选择:
创建一个路由器
并传递到博客
,例如app.use('/blogs', blogs(router));
或
添加app.post()
,例如
app.post('/blogs/newBlog', (req, res) => {
res.send('test worked');
});
关于node.js - Node Express - 无法 POST/错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49345631/
我用运行 Node node --debug app OR node --debug-brk app 它有反应 debugger listening on port 5858 Express serv
这个问题在这里已经有了答案: What is the difference between (int *i) and (int* i) in context of both C and C++? [
我有一个应用程序,它通过消息队列将数据库写入命令分派(dispatch)给工作人员(数量非常大),因此无法保证它们的接收顺序。 我有两个 Node ,例如“Account”和“Media”。在此假设的
有没有办法在调用 ts-node 时将选项传递给 Node ?我正在尝试在 Node 中使用一个实验性功能,如果它能与 ts-node 一起使用,那就太好了。 这就是我目前正在做的事情: ts-nod
我有一个容器化的Node应用程序,它在DigitalOcean服务器上运行。当我更新服务器上的应用程序时,该应用程序必须关闭一小段时间。为了能够更新应用程序并避免停机,我目前正在阅读零停机时间部署/蓝
我正在编写一个 Node.js 应用程序。我正在使用 request 和 Cheerio 加载一组 URL 并获取该网站的大量信息,现在假设我想要获取的只是标题: var urls = {"url_1
如果不弹出以下错误,我无法安装任何 Node.js 模块。错误代码引用package.json文件。如果知道为什么会发生这种情况,我们将不胜感激。 最佳答案 这些不是错误,它们只是警告。一切都应该如此
如果我运行(从我的项目目录中): supervisor javascripts/index.js 我得到:/usr/bin/env: Node :没有这样的文件或目录 如果我运行: node java
我已遵循使用 Node-Inspector 的所有步骤 但是当我打开应用程序时,我在控制台上看不到任何脚本或日志。 我的应用程序在端口 4000 上运行。我认为唯一可能发生冲突的是端口 8080 上的
我在android中使用rxjava2,有时会遇到这样的问题: Observable.fromArray( // maybe a list about photo url in SD
我目前正在使用 Node 光纤来编写同步服务器端代码。我主要通过 try-catch block 进行错误处理,但外部库或其他小部分异步代码中总是有可能发生错误。我正在考虑使用新的域功能来尝试将这些错
看起来node-debug是node-inspector周围的一个shell?分别什么时候应该使用? 最佳答案 如果您安装node-debug,您只能访问node-debug命令。 如果您安装node
我目前正在代理后面工作,该代理不允许我执行此命令的 HTTP GET 请求阶段: Node node-sass/scripts/build.js 请求阶段: gyp http GET https://
听说node js可以用在服务端。我以前用过jsp。 jsp页面内部的java代码对客户端是不可见的。如果 Node js 只是 javascript,那么它如何对客户端不可见? 最佳答案 首先,No
我正在为 Node native 插件从 node-waf 构建迁移到 node-gyp 构建系统。 node-gyp 说它支持多个目标版本,但我在使用 node-gyp 时找不到如何指定目标 Nod
给定一个 $node ,我正在尝试在以下两种输出该 $node 的方式之间做出决定。 要么 $output = theme('node', $node); 或 node_build_content($
如果package.json中的窗口A打开一个新窗口B,node-main如何访问它?这是我的代码: package.json { "main": "index.html",
我试图在我的 xml 中的特定节点 ( ) 之前插入一个注释节点。这是它的方法: function test(xmlResponse) { var parser = new DOMParse
我正在尝试做npm install wrtc使用 Node 版本 16.14.0 但这还没有完成。它在给npm error code 1所以我试图将 Node 版本更改为以前的 lts 14.19.0
当我在 Visual Studio 中运行 Node.js 应用程序时,我收到以下消息:DeprecationWarning: 'node --debug' 和 'node --debug-brk'
我是一名优秀的程序员,十分优秀!