【问题标题】:Add data to Request in Typescript在 Typescript 中将数据添加到请求
【发布时间】:2017-05-18 11:48:47
【问题描述】:

我正在将我的代码从 javascript 转换为 typescript,但是在尝试将数据添加到请求时遇到了这个问题,这在 typescript 中显然是不可能的。这本书从 MongoDb 读取并添加到请求中,用于 .get() 和 .delete() 方法。

// bookModel.js
var mongoose = require('mongoose');

var bookModel =  mongoose.Schema({
    title: String,
    author: String,
    genre: String,
    read:{type:Boolean, default:false}
});
module.exports = mongoose.model('Book', bookModel, 'Book');
// bookController.js
var Book = require('./../models/bookModel'),
module.exports = function(){
var router = express.Router();

router.route('/:bookId')
        .all(function(req,res,next){
            Book.findById(req.params.bookId,function(err,book){
                if(err)
                    res.status(500).send(err);
                else if(book)
                {
                    req.book = book;
                    next();    
                }
                else
                {
                    res.status(404).send('No book found');
                }
            })
        })
        .get(function(req,res){
            res.json(req.book);
        })
        .delete(function(req,res){
            req.book.remove(function(err,book){
                if(err)
                    res.status(500).send(err);
                else
                    res.sendStatus(200);
            })
        })

如何在 typescript 中将数据添加到请求中,以及如何通过以下方法检索图书?

【问题讨论】:

  • 你应该可以使用function(req:express.Request, res:express.Response){}来声明req和res的类型
  • 在我的 TS .all() 函数中,我使用 express 中的类型为 public all(req:Requst ,res: Response ,next: NextFunction){ ... },但您不能像在 JS 中那样只将数据添加到像 req.book = book 这样的请求中。还有其他方法可以将请求中的数据传递给 get() 和 delete() 方法吗?

标签: javascript mongodb express typescript


【解决方案1】:

在 Typescript 中,您可以定义类型。你可以通过定义一个类型来模仿 JS 对象的行为,该类型的键是字符串,值可以是这样的任何东西:

type Indexed = {
  [key: string]: any;
};

现在你可以有一个如下所示的函数定义:

router.route('/:bookId')
        .all(function(req: Indexed, res, next) {

明确表达你的意图通常很有用,目前还没有很好地反映。

req.book = book; // works

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多