我有以下端点设置来在测试运行后重置数据库:
import { getConnection } from 'typeorm';
import express from 'express';
const router = express.Router();
const resetDatabase = async (): Promise<void> => {
const connection = getConnection();
await connection.dropDatabase();
await connection.synchronize();
};
// typescript-eslint throws an error in the following route:
router.post('/reset', async (_request, response) => {
await resetTestDatabase();
response.status(204).end();
});
export default router;
Run Code Online (Sandbox Code Playgroud)
此后的整个路线都async带有下划线,并带有 typescript-eslint 错误Promise returned in function argument where a void return was expected.
该应用程序工作完美,但我不确定我是否应该执行更安全的实现,或者只是忽略/禁用此应用程序的 Eslint。知道该代码有什么问题吗?
我已经检查了与此主题相关的其他帖子,但在我的代码中找不到问题.
const myMiddleware = (fn) => {
return (req, res, next) => {
var fullUrl = req.protocol + '://' + req.get('host') + req.url;
console.log(fullUrl)
next()
}
}
const app = express()
app.use('/dist', express.static(__dirname + '/client/dist'))
app.use('/static', express.static(__dirname + '/client/static'))
app.use(bodyParser.urlencoded({ extended: false }))
app.use(cookieParserMiddleware())
app.use(passport.initialize())
const server = https.createServer(options, app)
app.get('/', myMiddleware((req, res) => {
res.sendFile(__dirname + '/client/dist/index.html')
}))
app.all('*', (req, res) => {
res.redirect('/')
})
server.listen(8080, function listening() {
console.log('Listening on %d', server.address().port)
})
Run Code Online (Sandbox Code Playgroud)
没有myMiddlewareon '/'路径,一切都按预期工作.与 …
我正在尝试将现有 VNET 包含在应用服务中,但我遇到了以下问题:
无法向现有子网添加委派。: 子网委派 /subscriptions 不能从 [] 更改为 [Microsoft.Web/serverfarms],因为它正被资源使用
天蓝色限制?一个 VNET 可以使用多少资源?
我正在尝试通过 Express 使用路由器进行 POST 呼叫,但收到请求实体太大错误,有人可以帮助解决该问题吗?
我想为我的 POST 调用负载设置 mb 限制。我尝试过通过 body-parser 设置 app.use() 限制,但似乎遇到了同样的问题。
谢谢
我有以下快递控制器
class ThingsController {
static async index(req, res, next) {
try {
const things = await Thing.all();
res.json(things);
} catch(err) {
next(err);
}
}
}
Run Code Online (Sandbox Code Playgroud)
和路由器
router.route('/things').get(ThingsController.index)
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我计划使用几个控制器来渲染结果
我不想每次都重复 try/catch 块
我的第一个解决方案是将此逻辑提取到处理承诺拒绝功能中:
const handlePromiseRejection = (handler) =>
async (req, res, next) => {
try{
await handler(req, res, next);
} catch(err) {
next(err);
};
};
Run Code Online (Sandbox Code Playgroud)
现在我们可以从 ThingsController.index 中删除 try/catch 块,并且需要将路由器更改为:
router.route('/things')
.get(handlePromiseRejection(ThingsController.index))
Run Code Online (Sandbox Code Playgroud)
但是添加handlePromiseRejection每条路线可能是一项乏味的任务,我希望有更聪明的解决方案。
你有什么想法?
我在其他页面和论坛上查了很多答案,但我仍然没有明白。我做错了什么?帮我
*已编辑。我添加了需要路由和 app.use。看起来函数 isLOGgedIn 没有导出,但我不知道该怎么做。我在另一个应用程序中确实喜欢这个,它在那里工作。
auth-routes.js
const express = require("express"),
router = express.Router(),
passport = require("passport")
function isLoggedIn(req, res, next) {
if (req.isAuthenticated()) {
return next()
}
res.redirect("/auth/login")
}
module.exports = router
Run Code Online (Sandbox Code Playgroud)
用户路由.js
const express = require("express"),
router = express.Router(),
authRoutes = require("./auth-routes")
router.get("/profile", authRoutes.isLoggedIn, (req, res) => {
res.render("user/profile", {user: req.user})
})
module.exports = router
Run Code Online (Sandbox Code Playgroud)
需要路由
const titleRoutes = require("./routes/title-routes")
const authRoutes = require("./routes/auth-routes")
const userRoutes = require("./routes/user-routes")
Run Code Online (Sandbox Code Playgroud)
应用程序使用
app.use(titleRoutes)
app.use("/auth", authRoutes)
app.use("/user", userRoutes)
Run Code Online (Sandbox Code Playgroud) 在将此标记为重复之前,请理解我无法从其他答案中获得我正在寻找的解释.
如果我正在做一个寻找基于URL ID的客户应用程序,是什么说的区别customers/1234,并使用req.params和customers?id=1234使用req.query?两个url数据方法的作用有何不同?
我在 Firebase Cloud Functions 上运行它,所以在我的index.js 中,我有以下代码片段:
const admin = require("firebase-admin");
const functions = require("firebase-functions");
const usersApi = require("./api/users")
const paymentsApi = require("./api/payments")
const express = require('express');
const cors = require('cors');
const app = express();
const checkHeader = async(req, res, next) => {
if(req.headers.authorization) {
admin.auth().verifyIdToken(req.headers.authorization)
.then(token => {
req.uid = token.uid;
req.email = token.email;
req.stripeID = token.stripeID || null;
return next();
})
.catch(e => {
return next(e.errorInfo.code)
})
} else {
return next('No token found');
}
}
app.use(cors({origin: …Run Code Online (Sandbox Code Playgroud) 现在我有两条路线,调用相同的方法。
假设方法的名称是myMethod 并且两条路线是/和/:params
router.get("/", myMethod);
router.get("/:param", myMethod);
Run Code Online (Sandbox Code Playgroud)
由于在这两种情况下我都必须调用相同的方法,因此我想使用单个路由来调用myMethod。像这样的东西,
router.get('/' or '/:param', methodName);
如果可能,那么我该怎么做?
我正在创建一个简单的博客后端(API)。
我尝试创建路由器,但现在遇到一个问题,我不明白如何调试。
这是路由器。
const express = require('express');
const Article = require('../models/Article')
let router = express.Router();
const app = require('../app');
router.get('/:articleId', (req,res) => {
Post.findOne({_id : req.params.articleId})
.then(doc => {
if(!doc) res.send('No such post in DB')
res.send(doc).sendStatus(200)
})
.catch(err => res.send({'error' : `you got some error - ${err}`}).sendStatus(400))
})
router.post('/', app.auth, async (req,res)=>{
if(req.auth) {
const doc = await User.findOne({uname : req.user});
const article = {
authorId : doc._id,
article : {
title : req.body.title,
content : req.body.article
},
tags : …Run Code Online (Sandbox Code Playgroud) express-router ×10
express ×8
node.js ×8
javascript ×3
asp.net-core ×1
azure ×1
es6-promise ×1
eslint ×1
http ×1
middleware ×1
mongoose ×1
promise ×1
routes ×1
typeorm ×1
typescript ×1
url-routing ×1
vnet ×1